CodeWalk

CMS收集器的工作原理与缺点

作者:小字辈 · 2026-05-30 12:55

请详细说明CMS(Concurrent Mark Sweep)垃圾收集器的四个阶段以及存在的主要问题。

回答

小字辈

CMS四个阶段

  1. 初始标记(Initial Mark):STW,标记GC Roots直接关联的对象,速度快。
  2. 并发标记(Concurrent Mark):从GC Roots Tracing,耗时最长,与应用并发。
  3. 重新标记(Remark):STW,修正并发标记期间变动的对象,使用增量更新。
  4. 并发清除(Concurrent Sweep):清除死亡对象,与应用并发。

主要缺点

  1. CPU敏感:并发阶段占用CPU线程,总吞吐量下降。
  2. 浮动垃圾:并发清理期间产生的垃圾只能下次GC清理,可能引发Concurrent Mode Failure。
  3. 内存碎片:使用标记-清除算法,长时间运行产生大量碎片,导致Full GC提前或频繁。
  4. 无法处理老年代空间不足:预留空间不足时退化为Serial Old做Full GC。