Serial 串行、Parallel 并行、CMS 并发收集器
2026/7/29 20:49:09 网站建设 项目流程

一、Serial 串行垃圾回收器

1. 定义与运行机制

Serial 是最基础、单线程垃圾收集器,分为Serial Young(新生代)+ Serial Old(老年代)

  1. 全程只有1 条 GC 线程执行垃圾回收;
  2. 只要开始 GC,全部业务用户线程 STW 暂停,GC 完成后业务线程才能恢复;
  3. 新生代使用复制算法,老年代使用标记 - 压缩算法。

2. 特点

  1. 单线程回收,没有多线程竞争,内存开销极小;
  2. 简单高效,资源占用低,适合 CPU 核心少的机器;
  3. STW 停顿时间长,堆越大,停顿越严重。

3. 适用场景

  1. JDK 客户端模式默认收集器;
  2. 单核、双核低配置机器、嵌入式设备;
  3. 堆内存很小的小程序、本地测试工具。

二、Parallel 并行垃圾回收器(Parallel GC)

1. 定义与运行机制

全称 Parallel Throughput,JDK 服务端默认收集器,分为 Parallel Young + Parallel Old。

  1. GC 阶段使用多条 GC 线程并行工作,充分利用多核 CPU;
  2. GC 期间依然会全部用户线程 STW 暂停,只是 GC 内部多线程提速;
  3. 新生代复制算法,老年代标记压缩;
  4. 核心目标:最大化吞吐量(吞吐量 = 业务运行时间 / 总运行时间)。

2. 特点

  1. 多核机器下 GC 速度远快于 Serial;
  2. 可设置吞吐量目标,JVM 自动调整堆大小、GC 频率;
  3. 牺牲停顿时间换取吞吐量,不控制单次 STW 时长,大堆下单次停顿会很久。

3. 适用场景

  1. 后台批处理、大数据离线任务;
  2. 对响应延迟不敏感、追求高吞吐量的业务;
  3. JDK8 之前服务端默认收集器。

三、CMS 并发标记清除收集器(Concurrent Mark Sweep)

1. 定义与运行机制

CMS 是第一款并发低延迟收集器,只负责老年代回收,新生代搭配 Parallel Young 使用。 核心设计:GC 标记阶段和用户业务线程并发执行,大幅缩短 STW 暂停时间。 整体分为 6 个阶段,只有 3 个阶段会 STW:

  1. 初始标记(STW):快速标记 GC Roots 直接可达对象;
  2. 并发标记(不暂停):GC 线程和业务线程同时运行,遍历所有存活对象;
  3. 并发预清理(不暂停);
  4. 重新标记(STW):修正并发阶段新增 / 变动的引用,防止漏标;
  5. 并发清理(不暂停):并行回收垃圾对象;
  6. 并发重置(不暂停):清空标记数据,准备下一次 GC。

2. 核心特点与痛点

优点
  1. 大部分阶段并发执行,STW 停顿很短,追求低延迟;
  2. 适合需要快速响应的线上业务。
致命缺点(面试高频考点)
  1. 标记清除算法,产生大量内存碎片;内存碎片化严重时,分配大对象失败,直接触发 Full GC;
  2. 并发失败:并发清理时堆内存占用过快,预留空间不足,CMS 无法完成并发回收,退化串行 Full GC,长时间 STW;
  3. 需要预留一部分堆内存给并发 GC 使用,内存利用率低;
  4. 维护三色标记、浮动垃圾,带来额外 CPU 开销。

3. 适用场景

  1. 互联网线上业务、接口服务,要求低延迟、短 GC 停顿;
  2. JDK8 广泛使用,JDK9 后被 G1 替代,JDK14 彻底废弃 CMS。

四、三者核心横向对比(面试加分)

表格

收集器GC 线程用户线程 STW核心目标算法主要缺陷
Serial 串行单线程 GCGC 全程暂停最小内存开销复制 + 标记压缩多核机器 GC 速度慢,停顿久
Parallel 并行多线程 GCGC 全程暂停最大化吞吐量复制 + 标记压缩不控制停顿,大堆 STW 很长
CMS 并发多线程 GC,标记 / 清理与业务并发仅初始、重新标记短暂暂停低延迟、短 STW标记清除内存碎片、并发失败、浮动垃圾

五、一句话总结收尾

Serial 单线程、资源消耗最低,适合小内存单核设备;Parallel 多线程并行回收,追求高吞吐量,适合离线批处理;CMS 实现 GC 与业务线程并发,大幅缩短 STW 停顿,主打低延迟,但存在内存碎片、并发失败等问题,后续被 G1 替代。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询