跳转至

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阶段耗时‌。