Tres tipos de parámetros de JVM
1) Parámetros estándar
Los parámetros estándar de JVM son generalmente muy estables y no cambiarán en futuras versiones de JVM. Puede usar java -help para recuperar todos los parámetros estándar.
C:\Users\user>java -help
用法: java [-options] class [args...]
(执行类)
或 java [-options] -jar jarfile [args...]
(执行 jar 文件)
其中选项包括:
-d32 使用 32 位数据模型 (如果可用)
-d64 使用 64 位数据模型 (如果可用)
-server 选择 "server" VM
默认 VM 是 server.
-cp <目录和 zip/jar 文件的类搜索路径>
-classpath <目录和 zip/jar 文件的类搜索路径>
用 ; 分隔的目录, JAR 档案
和 ZIP 档案列表, 用于搜索类文件。
-D<名称>=<值>
设置系统属性
-verbose:[class|gc|jni]
启用详细输出
-version 输出产品版本并退出
-version:<值>
警告: 此功能已过时, 将在
未来发行版中删除。
需要指定的版本才能运行
-showversion 输出产品版本并继续
-jre-restrict-search | -no-jre-restrict-search
警告: 此功能已过时, 将在
未来发行版中删除。
在版本搜索中包括/排除用户专用 JRE
-? -help 输出此帮助消息
-X 输出非标准选项的帮助
-ea[:<packagename>...|:<classname>]
-enableassertions[:<packagename>...|:<classname>]
按指定的粒度启用断言
-da[:<packagename>...|:<classname>]
-disableassertions[:<packagename>...|:<classname>]
禁用具有指定粒度的断言
-esa | -enablesystemassertions
启用系统断言
-dsa | -disablesystemassertions
禁用系统断言
-agentlib:<libname>[=<选项>]
加载本机代理库 <libname>, 例如 -agentlib:hprof
另请参阅 -agentlib:jdwp=help 和 -agentlib:hprof=help
-agentpath:<pathname>[=<选项>]
按完整路径名加载本机代理库
-javaagent:<jarpath>[=<选项>]
加载 Java 编程语言代理, 请参阅 java.lang.instrument
-splash:<imagepath>
使用指定的图像显示启动屏幕
有关详细信息, 请参阅 http://www.oracle.com/technetwork/java/javase/documentation/index.html。
Caso 1: comprobar la versión de JVM
C:\Users\user>java -version
java version "1.8.0_144"
Java(TM) SE Runtime Environment (build 1.8.0_144-b01)
Java HotSpot(TM) 64-Bit Server VM (build 25.144-b01, mixed mode)
Nota: El parámetro -showversion significa que la información de la versión se imprime primero y luego se ejecutan los siguientes comandos, lo cual es muy útil durante la depuración
Caso 2: Configuración de parámetros de propiedad del sistema a través de -D
package com.studio;
public class Test {
public static void main(String[] args) {
String str = System.getProperty("str");
if (str == null) {
System.out.println("studio");
} else {
System.out.println(str);
}
}
}
D:\JavaEE\JavaEE_2022_0311\JVMTest\src>javac com/studio/Test.java
D:\JavaEE\JavaEE_2022_0311\JVMTest\src>java -Dstr=abcd com.studio.Test
abcd
-servidor y -parámetros del cliente
El espacio de almacenamiento dinámico inicial de la máquina virtual del servidor será más grande y el recolector de elementos no utilizados paralelo se usa de forma predeterminada, que se inicia lentamente y se ejecuta rápidamente.
La máquina virtual del cliente será relativamente conservadora, el espacio de almacenamiento dinámico inicial será más pequeño y se utilizará el recolector de basura en serie. Su objetivo es hacer que la JVM se inicie más rápido, pero se ejecutará más lentamente que el modo de máquina virtual del servidor.
Cuando se inicie la JVM, seleccionará automáticamente la JVM del tipo Servidor o Cliente según el hardware y el sistema operativo.
Sistema operativo de 32 bits: Si es un sistema Windows, por defecto se utiliza la JVM de tipo Cliente independientemente de la configuración del hardware. Si es otro sistema operativo, la máquina está configurada con más de 2 GB de memoria y más de 2 CPU para usar el modo servidor por defecto, de lo contrario usar el modo cliente.
El sistema operativo de 64 bits solo tiene el tipo de servidor y no admite el tipo de cliente.
java -client -showversion com.studio.Test
java -server -showversion com.studio.Test
2) Parámetro -X (parámetro no estándar)
El parámetro -X de jvm es un parámetro no estándar. En diferentes versiones de jvm, los parámetros pueden ser diferentes. Puede ver los parámetros no estándar a través de java - X.
D:\JavaEE\JavaEE_2022_0311\JVMTest\src>java -X
-Xmixed 混合模式执行 (默认)
-Xint 仅解释模式执行
-Xbootclasspath:<用 ; 分隔的目录和 zip/jar 文件>
设置搜索路径以引导类和资源
-Xbootclasspath/a:<用 ; 分隔的目录和 zip/jar 文件>
附加在引导类路径末尾
-Xbootclasspath/p:<用 ; 分隔的目录和 zip/jar 文件>
置于引导类路径之前
-Xdiag 显示附加诊断消息
-Xnoclassgc 禁用类垃圾收集
-Xincgc 启用增量垃圾收集
-Xloggc:<file> 将 GC 状态记录在文件中 (带时间戳)
-Xbatch 禁用后台编译
-Xms<size> 设置初始 Java 堆大小
-Xmx<size> 设置最大 Java 堆大小
-Xss<size> 设置 Java 线程堆栈大小
-Xprof 输出 cpu 配置文件数据
-Xfuture 启用最严格的检查, 预期将来的默认值
-Xrs 减少 Java/VM 对操作系统信号的使用 (请参阅文档)
-Xcheck:jni 对 JNI 函数执行其他检查
-Xshare:off 不尝试使用共享类数据
-Xshare:auto 在可能的情况下使用共享类数据 (默认)
-Xshare:on 要求使用共享类数据, 否则将失败。
-XshowSettings 显示所有设置并继续
-XshowSettings:all
显示所有设置并继续
-XshowSettings:vm 显示所有与 vm 相关的设置并继续
-XshowSettings:properties
显示所有属性设置并继续
-XshowSettings:locale
显示所有与区域设置相关的设置并继续
-X 选项是非标准选项, 如有更改, 恕不另行通知。
-Xint, -Xcomp, -Xmixed
-
En el modo interpretado, el indicador -Xint obliga a la JVM a ejecutar todos los códigos de bytes, lo que, por supuesto, ralentiza las cosas, normalmente por un factor de 10 o más.
-
El parámetro -Xcomp es lo opuesto a -Xint La JVM compilará todos los bytecodes en código nativo cuando se use por primera vez, lo que resultará en una optimización máxima.
Sin embargo, muchas aplicaciones también tendrán alguna penalización de rendimiento al usar -Xcomp, que por supuesto es menor que usar -Xint, porque -xcomp no permite que la JVM habilite todas las capacidades del compilador JIT. El compilador JIT puede juzgar si necesita ser compilado o no, si todo el código está compilado, no tiene sentido para algún código que solo se ejecuta una vez.
-
-Xmixed es un modo mixto, que mezcla el modo de interpretación y el modo de compilación, que está determinado por el propio jvm. Este es el modo predeterminado del jvm y el modo recomendado.
-Xms, -Xmx, -Xss
-Xms y -Xmx son para establecer el tamaño inicial y el tamaño máximo de la memoria del montón de jvm, respectivamente.
-Xms512m: equivalente a -XX:InitialHeapSize, establezca la memoria de almacenamiento dinámico inicial de JVM en 512M.
-Xmx2048m: equivalente a -XX:MaxHeapSize, establezca la memoria de almacenamiento dinámico máxima de la JVM en 2048M.
-Xss256k: equivalente a -XX:ThreadStackSize, establece el tamaño de la pila de subprocesos de Java.
# 初始化和最大化堆都设置为8m
java -Xms8m -Xmx8m com.studio.Test
3) Parámetro -XX (la tasa de uso más alta)
El parámetro -XX también es un parámetro no estándar, utilizado principalmente para operaciones de depuración y ajuste de JVM.
Hay dos formas de usar el parámetro -XX, una es de tipo booleano, la otra es de tipo no booleano
- Formato de tipo booleano: -XX:[±] Por ejemplo: -XX:+DisableExplicitGC Indica que la invocación manual de la operación gc está deshabilitada, es decir, llamar a System.gc() no es válido .
- Formato de tipo no booleano: -XX: Por ejemplo: -XX:NewRatio=1 indica la relación entre la nueva generación y la generación anterior.
java -XX:+DisableExplicitGC -showversion com.studio.Test
Ver los parámetros de ejecución del jvm
imprimir argumentos al ejecutar el comando java
Simplemente agregue -XX:+PrintFlagsFinal cuando ejecute el comando java.
D:\JavaEE\JavaEE_2022_0311\JVMTest\src>java -XX:+PrintFlagsFinal -version
[Global flags]
uintx AdaptiveSizeDecrementScaleFactor = 4 {
product}
uintx AdaptiveSizeMajorGCDecayTimeScale = 10 {
product}
uintx AdaptiveSizePausePolicy = 0 {
product}
uintx AdaptiveSizePolicyCollectionCostMargin = 50 {
product}
uintx AdaptiveSizePolicyInitializingSteps = 20 {
product}
uintx AdaptiveSizePolicyOutputInterval = 0 {
product}
uintx AdaptiveSizePolicyWeight = 10 {
product}
uintx AdaptiveSizeThroughPutPolicy = 0 {
product}
uintx AdaptiveTimeWeight = 25 {
product}
bool AdjustConcurrency = false {
product}
bool AggressiveOpts = false {
product}
intx AliasLevel = 3 {
C2 product}
bool AlignVector = false {
C2 product}
intx AllocateInstancePrefetchLines = 1 {
product}
......
De la información anterior se puede ver que los parámetros tienen tipo booleano y tipo numérico, y el operador de valor es = o :=, que representan el valor predeterminado y el valor modificado respectivamente.
Ver parámetros jvm en ejecución
jinfo -flags 7632
jinfo -flag InitialHeapSize 7632