Tres parámetros de ejecución de JVM

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

inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

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.
inserte la descripción de la imagen aquí

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.
    inserte la descripción de la imagen aquí

-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.
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

Ver parámetros jvm en ejecución

inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

jinfo -flags 7632
jinfo -flag InitialHeapSize 7632

Supongo que te gusta

Origin blog.csdn.net/fengsheng5210/article/details/123678695
Recomendado
Clasificación