JAVA 八股文 第七章(CMS 垃圾收集器)
CMS 垃圾收集器详解工作流程 优缺点 面试总结在 JVM 垃圾回收器中CMSConcurrent Mark Sweep曾经是非常重要的一款收集器尤其是在对低延迟要求较高的系统中被广泛使用。虽然在新版本 JDK 中已经被淘汰但它依然是面试中的高频考点。本文将从工作流程、优缺点以及使用场景三个方面系统讲清 CMS。一、什么是 CMSCMS 全称Concurrent Mark Sweep并发标记-清除 核心特点以“最小停顿时间”为目标的垃圾收集器 基本信息使用算法标记-清除Mark-Sweep作用区域老年代最大特点并发执行与用户线程同时运行二、CMS 工作流程重点CMS 的执行流程分为四个阶段1️⃣ 初始标记Initial Mark标记 GC Roots 直接关联的对象特点需要Stop-The-WorldSTW执行速度快只标记一层2️⃣ 并发标记Concurrent Mark从 GC Roots 出发遍历整个对象图特点与用户线程并发执行耗时最长不会暂停应用3️⃣ 重新标记Remark修正并发标记期间发生变化的对象引用原因并发阶段用户线程仍在运行引用关系可能变化特点需要STW时间比初始标记稍长4️⃣ 并发清除Concurrent Sweep清理未被标记的对象垃圾特点与用户线程并发执行不需要移动对象三、流程总结初始标记STW → 并发标记 → 重新标记STW → 并发清除四、CMS 的优点✅ 1. 低停顿最大优势大部分时间与用户线程并发执行 适用于Web 服务实时系统对响应时间敏感的应用✅ 2. 响应速度快停顿时间短用户体验更好五、CMS 的缺点重点❌ 1. 内存碎片问题使用标记-清除算法 → 不整理内存 结果空间不连续大对象分配困难❌ 2. CPU 资源敏感GC 线程和业务线程竞争 CPU 影响系统吞吐量下降❌ 3. 浮动垃圾Floating Garbage并发清理期间产生的新垃圾无法本次回收 结果需要预留空间否则容易触发 Full GC❌ 4. 容易触发 Full GC最严重当出现内存不足 或 碎片严重 会退化为Serial Old单线程 Full GC 问题停顿时间非常长 ❗❌ 5. 已被淘汰JDK 9 标记废弃 JDK 14 移除 原因被 G1 收集器替代六、适用场景✔ 适合对延迟敏感的系统低停顿优先❌ 不适合CPU 资源紧张内存较小对吞吐量要求高的系统七、面试高频总结✔ CMS 工作流程初始标记 → 并发标记 → 重新标记 → 并发清除✔ CMS 优点低停顿、并发执行✔ CMS 缺点1. 内存碎片 2. CPU 开销大 3. 浮动垃圾 4. 易 Full GC✔ 为什么被淘汰无法解决碎片问题稳定性差被 G1 替代八、终极总结CMS 的本质 用“并发”换“低停顿”再补一句核心理解牺牲吞吐量和空间连续性换取更好的响应时间九、结语CMS 是 JVM 垃圾回收历史中的重要一环带来了“低停顿”的理念但也暴露了并发回收的复杂性