文章目录
一、了解JVM参数
JVM参数类型:
-
- 标准参,所有JVM都应该支持
- -X 非标,每个JVM实现不同
- -XX 不稳定参数,下个版本可能取消
常见垃圾回收器组合参数设定:(1.8)
-
-XX:+UseSerialGC = Serial New (DefNew) + Serial Old
- 小型程序。默认情况下不会是这种选项,HotSpot会根据计算及配置和JDK版本自动选择收集器
-
-XX:+UseParNewGC = ParNew + SerialOld
- 这个组合已经很少用(在某些版本中已经废弃)
-
-XX:+UseConcMarkSweepGC = ParNew + CMS + Serial Old
-
-XX:+UseParallelGC = Parallel Scavenge + Parallel Old (1.8默认) 【PS + SerialOld】
-
-XX:+UseParallelOldGC = Parallel Scavenge + Parallel Old
-
-XX:+UseG1GC = G1
-
Linux中没找到默认GC的查看方法,而windows中会打印UseParallelGC
- java +XX:+PrintCommandLineFlags -version
- 通过GC的日志来分辨
-
Linux下1.8版本默认的垃圾回收器到底是什么?
- 1.8.0_181 默认(看不出来)Copy MarkCompact
- 1.8.0_222 默认 PS + PO
GC常用参数
-
-Xmn -Xms -Xmx -Xss
年轻代 最小堆 最大堆 栈空间 -
-XX:+UseTLAB
使用TLAB,默认打开,(一般不需要调整) -
-XX:+PrintTLAB
打印TLAB的使用情况,(一般不需要调整) -
-XX:TLABSize
设置TLAB大小,(一般不需要调整) -
-XX:+DisableExplictGC,要默认打开,禁用手动频繁调用gc
System.gc()不管用 ,FGC -
-XX:+PrintGC
打印出GC信息 -
-XX:+PrintGCDetails
打印出GC详细信息 -
-XX:+PrintGCCauses
打印GC和产生的原因 -
-XX:+PrintHeapAtGC
-
-XX:+PrintGCTimeStamps
打印GC详细时间 -
-XX:+PrintGCApplicationConcurrentTime (低)
打印应用程序时间 -
-XX:+PrintGCApplicationStoppedTime (低)
打印暂停时长 -
-XX:+PrintReferenceGC (重要性低)
记录回收了多少种不同引用类型的引用 -
-verbose:class
类加载详细过程 -
-XX:+PrintVMOptions
打印运行时参数 -
-XX:+PrintFlagsFinal -XX:+PrintFlagsInitial
必须会用,打印参数
-
-Xloggc:opt/log/gc.log
设置gc文件 -
-XX:MaxTenuringThreshold
升代年龄,最大值15,cms默认6,其他默认15 -
锁自旋次数 -XX:PreBlockSpin 热点代码检测参数-XX:CompileThreshold 逃逸分析 标量替换 …
这些不建议设置
Parallel常用参数
- -XX:SurvivorRatio
- -XX:PreTenureSizeThreshold
大对象到底多大 - -XX:MaxTenuringThreshold
指定对象经过多少次垃圾回收进入老年代,cms默认6,其他默认15。补充:动态年龄指年轻代占用空间超Survivor的一半时会把年龄最大的放入老年代。 - -XX:+ParallelGCThreads
并行收集器的线程数,同样适用于CMS,一般设为和CPU核数相同 - -XX:+UseAdaptiveSizePolicy
自动选择各区大小比例
CMS常用参数
- -XX:+UseConcMarkSweepGC
- -XX:ParallelCMSThreads
CMS线程数量 - -XX:CMSInitiatingOccupancyFraction
使用多少比例的老年代后开始CMS收集,默认是68%(近似值),如果频繁发生SerialOld卡顿,应该调小,(频繁CMS回收) - -XX:+UseCMSCompactAtFullCollection
在FGC时进行压缩 - -XX:CMSFullGCsBeforeCompaction
多少次FGC之后进
文章评论