cms 底层原理和调优实战¶
CMS(Concurrent Mark Sweep)作为老年代垃圾回收器,以低延迟为核心目标,适用于对响应时间敏感的系统。
CMS底层原理¶
四阶段工作流程
- 初始标记(Initial Mark):STW阶段,标记GC Roots直接关联的对象;
- 并发标记(Concurrent Mark):与用户线程并发执行,遍历老年代对象引用链;
- 重新标记(Remark):STW阶段,修正并发标记期间变动的引用关系(通过增量更新或原始快照算法);
- 并发清除(Concurrent Sweep):删除无引用对象,回收内存空间。
关键技术机制
- 卡表(Card Table):将老年代划分为512字节的卡片,记录跨代引用,避免YGC时扫描整个老年代;
- 增量并发:通过交替执行GC线程与用户线程减少STW时间,但可能引发并发失败(Concurrent Mode Failure)。
CMS调优策略¶
核心参数调整
- -XX:CMSInitiatingOccupancyFraction=70:老年代内存占用达70%时触发CMS回收,避免Full GC;
- -XX:+UseCMSCompactAtFullCollection:Full GC时压缩内存碎片(默认关闭,需权衡性能);
- -XX:+CMSParallelRemarkEnabled:启用并行重新标记,减少Remark阶段耗时。