CMS垃圾收集器仅有初始标记和重新标记两个阶段需Stop The World:初始标记仅标记GC Roots直接关联对象,停顿极短;重新标记修正并发标记期间的漏标或误标,耗时稍长但仍短暂。

CMS 垃圾收集器中,只有初始标记和重新标记两个阶段需要 Stop The World(STW)。
初始标记阶段必须 STW
该阶段仅标记 GC Roots 直接关联的对象,例如:
- 虚拟机栈中引用的局部变量对象
- 本地方法栈中 JNI 引用的对象
- 方法区中静态字段引用的对象
- 方法区中常量池引用的对象
由于只做一层快速遍历,停顿时间极短,通常为毫秒级,但必须暂停所有用户线程以保证快照一致性。
并发标记阶段无需 STW
从初始标记的结果出发,遍历整个对象图并标记所有可达对象。此过程与用户线程并发执行,不中断应用服务,但耗时较长。
重新标记阶段必须 STW
用于修正并发标记期间因用户线程持续运行而产生的漏标或误标。虽然比初始标记耗时稍长,但仍远短于并发标记,属于短暂强制暂停。
并发清除阶段无需 STW
根据标记结果直接清理已确认死亡的对象,不移动存活对象,全程与用户线程并发运行,不触发全局暂停。
CMS 的核心设计目标就是压缩 STW 时间,所以它把最耗时的标记和清除都放在并发阶段完成,只保留两次轻量级暂停。


















