CMS垃圾回收器优化参数解释

CMS垃圾回收器优化参数,做如下记录。能找到的这些可能会起作用的参数,在此做一下记录。

-XX:+AggressiveOpts
启用这个参数,则每当 JDK 版本升级时,你的 JVM 都会使用最新加入的优化技术(如果有的话)

-XX:MaxDirectMemorySize=2G
堆外内存最大值
-Xmx4G
堆内存最大值
-Xms4G
堆内存初始值
-Xmn2G
新生代大小
-XX:+UseConcMarkSweepGC
开启CMS回收器

-XX:CMSInitiatingOccupancyFraction=70 是指设定CMS在对内存占用率达到70%的时候开始GC(因为CMS会有浮动垃圾,所以一般都较早启动GC)

-XX:+UseCMSInitiatingOccupancyOnly 只是用设定的回收阈值(上面指定的70%),如果不指定,JVM仅在第一次使用设定值,后续则自动调整.

-XX:+CMSIncrementalMode 该标志将开启CMS收集器的增量模式。增量模式经常暂停CMS过程,以便对应用程序线程作出完全的让步。因此,收集器将花更长的时间完成整个收集周期。
因此,只有通过测试后发现正常CMS周期对应用程序线程干扰太大时,才应该使用增量模式。由于现代服务器有足够的处理器来适应并发的垃圾收集,所以这种情况发生得很少。

-XX:+UseCMSCompactAtFullCollection

-XX:CMSFullGCsBeforeCompaction=0
CMSFullGCsBeforeCompaction 说的是,在上一次CMS并发GC执行过后,到底还要再执行多少次full GC才会做压缩。默认是0,也就是在默认配置下每次CMS GC顶不住了而要转入full GC的时候都会做压缩。
把CMSFullGCsBeforeCompaction配置为10,就会让上面说的第一个条件变成每隔10次真正的full GC才做一次压缩(而不是每10次CMS并发GC就做一次压缩,目前VM里没有这样的参数)。这会使full GC更少做压缩,也就更容易使CMS的old gen受碎片化问题的困扰。
本来这个参数就是用来配置降低full GC压缩的频率,以期减少某些full GC的暂停时间。CMS回退到full GC时用的算法是mark-sweep-compact,
但compaction是可选的,不做的话碎片化会严重些但这次full GC的暂停时间会短些;这是个取舍。

-XX:MaxTenuringThreshold=10 默认15,该参数主要是控制新生代需要经历多少次GC晋升到老年代中的最大阈值。

-XX:+CMSScavengeBeforeRemark
在CMS GC前启动一次ygc,目的在于减少old gen对ygc gen的引用,降低remark时的开销-----一般CMS的GC耗时 80%都在remark阶段

-XX:ParallelCMSThreads=6 定义并发CMS过程运行时的线程数

-XX:+CMSParallelInitialMarkEnabled 开启该阶段的并行标记,使用多个线程进行标记,减少暂停时间。

-XX:+CMSParallelRemarkEnabled 开启并行的Remark,加快remark的速度。

-XX:-UseAdaptiveSizePolicy

“Stop The World” 总计:
CMS Initial Mark(xxx secs) + CMS Remark (xxxx secs)= xxxms

你可能感兴趣的:(CMS垃圾回收器优化参数解释)