前言
本文主要介绍JVM各个参数的总结。
前置
- 查看默认参数
java +XX:+PrintCommandLineFlags -version - 查看某个进程的参数
jinfo -flags <pid>
通用
JVM参数类型
JVM 参数主要包括如下几种类型:
JVM参数获取
- java -XX:+PrintFlagsInitial 默认参数值
- java -XX:+PrintFlagsFinal 最终参数值
- java -XX:+PrintFlagsFinal | grep xxx 找到对应的参数 / java -XX:+PrintFlagsFinal -version |grep GC
其余常用参数
- -Xmn -Xms -Xmx -Xss
年轻代 最小堆 最大堆 栈空间 - -XX:NewSize=300M -XX:MaxNewSize=350M -XX:OldSize=100M -XX:MetaspaceSize=50M -XX:MaxMetaspaceSize=150M (老年代/年轻代/元数据区大小)
垃圾回收器选择
-
-XX:+UseSerialGC = Serial New (DefNew) + Serial Old
- 小型程序。默认情况下不会是这种选项,HotSpot会根据计算及配置和JDK版本自动选择收集器
-
-XX:+UseParNewGC = ParNew + SerialOld
- 这个组合已经很少用(在某些版本中已经废弃
[https://stackoverflow.com/questions/34962257/why-remove-support-for-parnewserialold-anddefnewcms-in-the-future] -
-XX:+UseConMarkSweepGC = ParNew + CMS + Serial Old -
-XX:+UseParallelGC = Parallel Scavenge + Parallel Old (1.8默认) (PS+PO) -
-XX:+UseParallelOldGC = Parallel Scavenge + Parallel Old -
-XX:+UseG1GC = G1 -
Linux中没找到默认GC的查看方法,而windows中会打印UseParallelGC
- java +XX:+PrintCommandLineFlags -version
- 通过GC的日志来分辨
垃圾回收器级别
- Serial 几十兆
- PS 上百兆 - 几个G
- CMS - 20G
- G1 - 上百G
- ZGC - 4T - 16T(JDK13)
Parallel Scavage + Parallel Old (PS+PO)
- -XX:SurvivorRatio
- -XX:PreTenureSizeThreshold 大对象大小
- -XX:+ParallelGCThreads
并行收集器的线程数,同样适用于CMS,一般设为和CPU核数相同 - -XX:+UseAdaptiveSizePolicy
自动选择各区大小比例
Garbage First (G1)
- -XX:+UseG1GC
- G1NewSizePercent
新生代最小比例,默认为5% - G1MaxNewSizePercent
新生代最大比例,默认为60% - ConcGCThreads
线程数量
CMS
使用少. 略.
ZGC
暂没接触. 略.
实战相关
-Xms800m -Xmx800m -Xmn800M -XX:NewSize=300M -XX:MaxNewSize=350M -XX:OldSize=100M -XX:MetaspaceSize=50M -XX:MaxMetaspaceSize=150M
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/Users/sean/jvm_dump/1 -verbose:gc -XX:+PrintCommandLineFlags -XX:+PrintGCDetails -XX:+PrintGCTimeStamps
-XX:+PrintHeapAtGC -Xloggc:gc.log -XX:+PrintGCApplicationStoppedTime -XX:+PrintReferenceGC -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false
-Xms800m -Xmx800m -Xmn800M -XX:MetaspaceSize=50M -XX:MaxMetaspaceSize=150M
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/Users/sean/jvm_dump/1 -verbose:gc -XX:+PrintCommandLineFlags -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintHeapAtGC -Xloggc:gc.log -XX:+PrintGCApplicationStoppedTime -XX:+PrintReferenceGC -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -XX:+UseG1GC
|