CMS(Concurrent Mark Sweep) 是一款以获取最短回收停顿时间(Low Latency)为目标的垃圾收集器。它在 JDK 1.5 时代引入,是 Java 历史上第一款真正意义上的并发垃圾收集器,广泛应用于对响应时间要求较高的 B/S 系统服务端上。 CMS 作用于老年代,基于“标记-清除”(Mark-Sweep)算法实现。 下面为您详细拆解 CMS 垃圾收集器的工作原理、核心阶段以及它的优缺点。 --- 一、 CMS 的四大核心阶段 CMS 的工作过程相对复杂,为了实现“并发”,它的核心流程被拆分成了 4 个主要阶段(如果细分会有 6-7 个,但核心是这 4 个)。 1. 初始标记(Initial Mark)—— STW (Stop-The-World) 动作: 仅仅只是标记一下 GC Roots 能直接关联到的对象,以及年轻代中存活对象引用的老年代对象。 特点: 速度非常快,因为不需要向下追溯整个对象图。 状态: 需要暂停所有用户线程(STW),但停顿时间极短。 2. 并发标记(Concurrent Mark)—— 并发执行 动作: 从“初始标记”阶段找到的...