1 参数类型

1.1 标准参数

-help

-server -client

-version -showversion

-cp -classpath

1.2 X 参数



非标准化参数



-Xint :解释执行



-Xcomp :第一次使用就编译成本地代码



-Xmixed :混合模式, JVM自己来决定是否编译成本地代码



JDK8默认混合模式JVM参数调优基础-参数的类型详解_内存溢出
JVM参数调优基础-参数的类型详解_内存溢出_02



1.3 XX 参数

  • 非标转化参数,相对不稳定,主要用于JVM调优和Debug

Boolean类型

  • 格式:
    -XX:[±]表示启用或者禁用name属性,比如:
    -XX:+ UseConcMarkSweepGC
    -XX:+UseG1GC

非 Boolean类型

  • 格式:
    ​​​-XX: <name> = <value>​​​表示name属性的值是value
    比如:
    ​​​-XX:MaxGCPauseMilis=500​​​​XX:GCTimeRatio=19​

注意,​​-Xmx -Xms​​不是X参数,而是XX参数

-Xms等价于​​-XX:InitialHeapSize​

-Xmx等价于​​-XX:MaxHeapSize​

2 运行时参数


  • -XX:+ PrintFlagsInitial
  • -XX:+ PrintFlagsFinal
  • -XX: +UnlockExperimentalVMOptions 解锁实验参数
  • -XX: + UnlockDiagnosticVMOptions 解锁诊断参数
  • -XX:+ PrintCommandLineFlags 打印命令行参数

查看XX选项的值


  • -XX:+PrintCommandLineFlags
  • -XX:+PrintFlagsInitial -XX:+PrintFlagsFinal
    JVM参数调优基础-参数的类型详解_内存溢出_03
  • =表示默认值
  • :=被用户或者JVM修改后的值

jps

JVM参数调优基础-参数的类型详解_内存溢出_04

JVM参数调优基础-参数的类型详解_本地代码_05

jinfo

  • 查看最大内存
jinfo -flag MaxHeapSize 1430

-XX:MaxHeapSize=1073741824

JVM参数调优基础-参数的类型详解_本地代码_06

  • 查看垃圾收集器
➜  ~ jinfo -flag UseConcMarkSweepGC 1430
-XX:-UseConcMarkSweepGC

JVM参数调优基础-参数的类型详解_内存溢出_07

  • 查看回收次数阈值
➜  ~ jinfo -flag MaxTenuringThreshold 58064
-XX:MaxTenuringThreshold=15

JVM参数调优基础-参数的类型详解_内存溢出_08

3 jstat

查看JVM统计信息

3.1 类装载

JVM参数调优基础-参数的类型详解_堆区_09

3.2 GC

-gc, -gcutil, -gccause, -gcnew, -gcold

JVM参数调优基础-参数的类型详解_堆区_10

-gc输出结果

S0C、S1C、SOU、 S1∪ : S0和S1的总量与使用量

EC、EU : Eden区总量与使用量

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

MC、MU : Metaspace区总量与使用量

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

YGC、YGCT : YoungGC的次数与时间

FGC、FGCT : FulIGC的次数.与时间

GCT :总的GC时间

JIT 编译


  • -compiler
  • -printcompilation
    JVM参数调优基础-参数的类型详解_内存溢出_11

4 jmap + MAT 实战内存溢出

堆区

JVM参数调优基础-参数的类型详解_本地代码_12

JVM参数调优基础-参数的类型详解_内存溢出_13

非堆区

JVM参数调优基础-参数的类型详解_内存溢出_14

JVM参数调优基础-参数的类型详解_堆区_15

JVM参数调优基础-参数的类型详解_堆区_16

5 导出内存映像文件

OutofMemory(OOM)相关的选项

如果程序发生了OOM后,JVM可以配置一些选项来做些善后工作,比如把内存给dump下来,或者自动采取一些别的动作


  • -XX:+HeapDumpOnOutOfMemoryError
    在内存出现OOM的时候,把Heap转存(Dump)到文件以便后续分析,文件名通常是​​java_pid<pid>.hprof​
  • -XX:HeapDumpPath=
    指定heap转存文件的存储路径,需要指定的路径下有足够的空间来保存转存文件
  • -XX:OnOutOfMemoryError
    指定一个可行性程序或者脚本的路径,当发生OOM的时候,去执行这个脚本

内存溢出自动导出


  • -XX:+ HeapDumpOnOutOfMemoryError
  • -XX:HeapDumpPath=./

使用jmap命令手动导出

JVM参数调优基础-参数的类型详解_内存溢出_17

JVM参数调优基础-参数的类型详解_堆区_18

JVM参数调优基础-参数的类型详解_堆区_19

jmap

option : -heap , -clstats , -dump: , -F

JVM参数调优基础-参数的类型详解_本地代码_20