Serial 串行、Parallel 并行、CMS 并发收集器

📅 2026/7/29 20:49:20
Serial 串行、Parallel 并行、CMS 并发收集器
一、Serial 串行垃圾回收器1. 定义与运行机制Serial 是最基础、单线程垃圾收集器分为Serial Young新生代 Serial Old老年代。全程只有1 条 GC 线程执行垃圾回收只要开始 GC全部业务用户线程 STW 暂停GC 完成后业务线程才能恢复新生代使用复制算法老年代使用标记 - 压缩算法。2. 特点单线程回收没有多线程竞争内存开销极小简单高效资源占用低适合 CPU 核心少的机器STW 停顿时间长堆越大停顿越严重。3. 适用场景JDK 客户端模式默认收集器单核、双核低配置机器、嵌入式设备堆内存很小的小程序、本地测试工具。二、Parallel 并行垃圾回收器Parallel GC1. 定义与运行机制全称 Parallel ThroughputJDK 服务端默认收集器分为 Parallel Young Parallel Old。GC 阶段使用多条 GC 线程并行工作充分利用多核 CPUGC 期间依然会全部用户线程 STW 暂停只是 GC 内部多线程提速新生代复制算法老年代标记压缩核心目标最大化吞吐量吞吐量 业务运行时间 / 总运行时间。2. 特点多核机器下 GC 速度远快于 Serial可设置吞吐量目标JVM 自动调整堆大小、GC 频率牺牲停顿时间换取吞吐量不控制单次 STW 时长大堆下单次停顿会很久。3. 适用场景后台批处理、大数据离线任务对响应延迟不敏感、追求高吞吐量的业务JDK8 之前服务端默认收集器。三、CMS 并发标记清除收集器Concurrent Mark Sweep1. 定义与运行机制CMS 是第一款并发低延迟收集器只负责老年代回收新生代搭配 Parallel Young 使用。 核心设计GC 标记阶段和用户业务线程并发执行大幅缩短 STW 暂停时间。 整体分为 6 个阶段只有 3 个阶段会 STW初始标记STW快速标记 GC Roots 直接可达对象并发标记不暂停GC 线程和业务线程同时运行遍历所有存活对象并发预清理不暂停重新标记STW修正并发阶段新增 / 变动的引用防止漏标并发清理不暂停并行回收垃圾对象并发重置不暂停清空标记数据准备下一次 GC。2. 核心特点与痛点优点大部分阶段并发执行STW 停顿很短追求低延迟适合需要快速响应的线上业务。致命缺点面试高频考点标记清除算法产生大量内存碎片内存碎片化严重时分配大对象失败直接触发 Full GC并发失败并发清理时堆内存占用过快预留空间不足CMS 无法完成并发回收退化串行 Full GC长时间 STW需要预留一部分堆内存给并发 GC 使用内存利用率低维护三色标记、浮动垃圾带来额外 CPU 开销。3. 适用场景互联网线上业务、接口服务要求低延迟、短 GC 停顿JDK8 广泛使用JDK9 后被 G1 替代JDK14 彻底废弃 CMS。四、三者核心横向对比面试加分表格收集器GC 线程用户线程 STW核心目标算法主要缺陷Serial 串行单线程 GCGC 全程暂停最小内存开销复制 标记压缩多核机器 GC 速度慢停顿久Parallel 并行多线程 GCGC 全程暂停最大化吞吐量复制 标记压缩不控制停顿大堆 STW 很长CMS 并发多线程 GC标记 / 清理与业务并发仅初始、重新标记短暂暂停低延迟、短 STW标记清除内存碎片、并发失败、浮动垃圾五、一句话总结收尾Serial 单线程、资源消耗最低适合小内存单核设备Parallel 多线程并行回收追求高吞吐量适合离线批处理CMS 实现 GC 与业务线程并发大幅缩短 STW 停顿主打低延迟但存在内存碎片、并发失败等问题后续被 G1 替代。