jvm参数类型

  • 标准参数(jvm各个版本基本不变)

    • ```shell
      -help
      -server
      -client
      -version
      -cp
      -classpath
      
      * X参数(非标准化参数,变化比较小)
      
        * ```shell
          -Xint 解释执行
          -Xcomp 第一次使用就编译成本地代码
          -Xmixed 混合模式,JVM自己来决定是否编译成本地代码
  • XX参数(用的比较多,主要用来JVM调优和debug)

    • Boolean类型

      格式:-XX:[+-]表示启用或者禁用name属性

      -XX:+UseConcMarkSweepGC
      -XX:+UseG1GC
    • 非Boolean类型

      格式:-XX:= 表示name属性的值是value

      -XX:MaxGCPauseMillis=500
      XX:GCTimeRatio=19
      
      #-Xms -Xmx 属于XX参数
      -Xms 等价于 -XX:InitialHeapSize
      -Xmx 等价于 -XX:MaxHeapSize

查看jvm运行时参数

  • ```shell
    -XX:+PrintFlagsInitial 查看初始值
    -XX:+PrintFlagsFinal 查看最终值
    -XX:+UnlockExperimentalVMOptions 解锁实验参数
    -XX:+UnlockDiagnosticVMOptions 解锁诊断参数
    -XX:+PrintCommandLineFlags 打印命令行参数
    
    * `-XX:+PrintFlagsFinal`  
    
      `java  -XX:+PrintFlagsFinal -version`
    
      ![](https://cdn.jsdelivr.net/gh/haominglfs/images/20200323234316.png)
    
      =表示默认值
    
      :=被用户或者jvm修改后的值
    
    * jinfo
    
      ```shell
      jinfo -flags 55208  打印被修改过的jvm参数值
      jinfo -flag <name> 55208  打印对应name的参数值

查看jvm统计信息

  • jstat

    options: 
     -class 类装载
     -compiler JIT编译信息
     -gc 垃圾回收信息
    • 类装载

    • 垃圾收集

      S0C S1C S0U S1U : S0与S1的总量与使用量

      EC EU :Eden区总量与使用量

      OC OU:Old区的总量与使用量

      MC MU:Metaspace 区总量与使用量

      CCSC CCSU:压缩类空间总量与使用量

      YGC YGCT :YongGC的次数与时间

      FGC FGCT:FullGC的次数与时间

      GCT:总的GC时间

    • JIT编译

导出内存映像文件

  • 内存溢出自动导出

    -XX:+HeapDumpOnOutOfMemoryError
    -XX:HeapDumpPath=./
  • 使用jmap命令手动导出

    jmap -dump:format=b,file=heap.hprof <虚拟机id>