首页   快速返回

JVM CMS 常用参数     所属分类 java
并发收集器 CMS(Concurrent Mark-Sweep)

-XX:+UseConcMarkSweepGC
激活CMS收集器 HotSpot JVM默认使用并行收集器

激活CMS 年轻代默认使用 ParNewGC

-XX:+CMSConcurrentMTEnabled
并发的CMS阶段将以多线程执行 默认开启

-XX:+CMSParallelRemarkEnabled
采用并行标记方式降低停顿

-XX:ConcGCThreads
设置并发收集线程数 
如果没有设置 JVM根据ParallelGCThreads参数计算默认的并行CMS线程数
ConcGCThreads =(ParallelGCThreads + 3)/4


-XX:CMSInitiatingOccupancyFraction
value=75 表示 第一次CMS垃圾收集会在老年代占用75%时被触发
默认值为68

-XX:+UseCMSInitiatingOccupancyOnly
当该标志被开启时,JVM通过CMSInitiatingOccupancyFraction的值进行每一次CMS收集,而不仅仅是第一次。
大多数情况下,JVM能作出更好的垃圾收集决策,一般不要设置该值

-XX:+CMSClassUnloadingEnabled
相对于并行收集器,CMS收集器默认不会对永久代进行回收。

-XX:+CMSIncrementalMode

增量模式经常暂停CMS过程,以便对应用程序线程作出让步,将花更长的时间完成整个收集周期。
只有通过测试后发现正常CMS周期对应用程序线程干扰太大时,才使用增量模式

-XX:+ExplicitGCInvokesConcurrent和-XX:+ExplicitGCInvokesConcurrentAndUnloadsClasses

ExplicitGCInvokesConcurrent JVM无论什么时候调用系统GC,都执行CMS GC,而不是Full GC。
ExplicitGCInvokesConcurrentAndUnloadsClasses 保证当有系统GC调用时,永久代也被包括进CMS垃圾回收的范围内

-XX:+DisableExplicitGC
或略 system.gc()

-XX:+UseCompressedOops
对对象数据进行压缩处理,提高内存利用率。

-XX:MaxGCPauseMillis=50
设置GC最大暂停时间,单位为毫秒。


防止堆碎片引起full gc,CMS阶段进行合并碎片,-XX:+UseCMSCompactAtFullCollection
-XX:+CMSParallelRemarkEnabled 减少remark时间 
-XX:+CMSScavengeBeforeRemark 强制remark之前开始一次minor gc

避免Perm区满引起的full gc,建议开启CMS回收Perm区
-XX:+CMSPermGenSweepingEnabled -XX:+CMSClassUnloadingEnabled

打开GC日志
-verbose:gc -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -Xloggc:/home/logs/gc.log

上一篇     下一篇
币圈吹牛逼套路汇总

如何判断一个数是否在40亿个整数中

延迟队列原理及使用场景

JVM CMS 介绍

各种垃圾收集器的特点及使用场景

顶尖学霸是如何炼成的