JVM底层原理之标配参数、X和XX参数

一、JVM的参数类型

(1)标配参数
    java -version

    

    java -help

    

    java -showversion

    

    在JDK各个版本之间稳定,很少有大的变化。

(2)X参数(了解)
    

    -Xint      解释执行

    

    -Xcomp 第一次使用就编译成本地代码(先编译)

    

    -Xmixed 混合模式(先编译后执行)--默认

    

(3)XX参数--只有类2种类型
    【1】Boolean类型XX参数        

公式:-XX:+ 或者-XX:- 某个属性值(+表示开启,-表示关闭)
        案例:   
        1)是否打印GC收集细节
               -XX:+PrintGCDetails
               -XX:-PrintGCDetails
        2)是否使用串行垃圾收集器
               -XX:+UseSerialGC
               -XX:-UserSerialGC
    代码验证:
    没有配置任何JVM -XX:+某个属性值
     
       启动main方法
     
       在Terminal使用JDK工具查看是否配置JVM参数
       jps -l 表示查看java运行的进程号
       jinfo -flag PrintGCDetails 表示查看JVM是否配置PrintGCDetails参数
       -XX:-PrintGCDetails 中减号表示没有配置PrintGCDetails参数

    
    配置JVM -XX:+PrintGCDetails参数
    
    重新启动main方法
     
    
       重新在Terminal使用JDK工具查看是否配置JVM参数
       jps -l 表示查看java运行的进程号
       jinfo -flag PrintGCDetails 表示查看JVM是否配置PrintGCDetails参数
       -XX:+PrintGCDetails 中加号表示配置了PrintGCDetails参数
     
    【2】KV设值类型
           公式:-XX: key(属性)= value(属性值)
           案例:
           查看-XX:MetaspaceSize=默认值大小
           -XX:MetaspaceSize=21807104(大约22MB)
           
           添加-XX:MetaspaceSize=1024m参数      
           
          查看-XX:MetaspaceSize=人工设置值大小
         -XX:MetaspaceSize=1073741824(1024MB)
         
         查看-XX:MaxTenuringThreshold=默认值大小
         -XX:MaxTenuringThreshold=15表示年轻代对象年龄达到15岁就会进入老年代
    


三、jinfo查看当前运行程序配置


         公式:jinfo -flag 配置项 进程号
         案例:
         查看JVM所有配置项(默认+人工配置)
         jinfo -flags 进程号
         Non-default VM flags表示JVM默认参数
         Command line表示人工配置参数
         
        人工配置的JVM参数
        


四、如何解释-Xms和-Xmx参数属于XX参数


      -Xms和-Xmx两个经典参数看起既不像Boolean类型XX参数,也不像KV设值类型XX参数。那为什么-Xms和-Xmx又属于XX参数?
       -Xms = -XX:InitialHeapSize
       -Xmx = -XX:MaxHeapSize


五、盘点家底JVM默认值


(1)第一种查看JVM默认值方式
       jinfo -flag 参数项 进程号
       jinfo -flags 进程号
(2)第二种查看JVM默认值方式
       公式:java -XX:+PrintFlagsInitial(查看jvm未更改的默认参数)
      
       公式:java -XX:+PrintFlagsFinal(查看jvm已经更改过的参数)
       :=表示jvm启动时候默认修改或者人工更改过的参数
       =表示jvm没有更改过的默认参数
    uintx InitialHeapSize                          := 266338304                           {product} 默认为操作系统64/1内存(我本机内存为16G)
      
      本机内存:
      
(3)-XX:+PrintFlagsFinal举例
        运行java命令的同时打印jvm参数
        java -XX:+PrintFlagsFinal UpdateJVMParamDemo
(4)-XX:+PrintCommanLineFlags打印命令行参数
        

猜你喜欢

转载自blog.csdn.net/lixinkuan328/article/details/94505882