Skip to content

常见垃圾回收器

HotSpot虚拟机主流四款垃圾回收器:串行收集器Serial、并行收集器Parallel、CMS并发收集器、G1收集器,分代搭配不同算法,适配不同业务场景。

一、串行垃圾收集器 Serial / Serial Old

1. 分区搭配与算法

  • Serial:新生代收集器,复制算法;
  • Serial Old:老年代收集器,标记整理算法。

2. 运行特点

全程单线程执行GC,所有GC阶段都会触发STW,暂停全部用户线程。

3. 适用场景

堆内存小、单核CPU环境,客户端本地程序,JDK客户端模式默认收集器。

二、并行垃圾收集器 ParNew / Parallel Old

1. 分区搭配与算法

  • ParNew:新生代,复制算法;
  • Parallel Old:老年代,标记整理算法;JDK8默认垃圾回收组合。

2. 运行特点

GC阶段使用多线程并行回收,但整个回收过程全程STW,侧重吞吐量

3. 适用场景

后台批处理、数据计算类程序,追求高吞吐量,可承受较长STW停顿。

三、CMS并发收集器(Concurrent Mark Sweep)

1. 分区与算法

仅作用于老年代,底层采用标记清除算法,会产生内存碎片。

2. 四大执行阶段

  1. 初始标记:短暂STW,标记GC Roots直接引用对象;
  2. 并发标记:GC线程与用户线程同时运行,遍历全部引用链;
  3. 重新标记:短暂STW,修正并发阶段新产生的垃圾对象;
  4. 并发清理:GC与用户线程并发执行,回收垃圾。

3. 优缺点

优点:大部分阶段并发执行,STW停顿极短,追求低延迟; 缺点:标记清除产生内存碎片、占用CPU资源高、并发阶段存在浮动垃圾。

4. 适用场景

互联网高并发低延迟业务,JDK9后逐步被G1替代。

四、G1垃圾收集器

1. 分区特点

不严格区分新生代、老年代,将整个堆划分为多个同等大小Region,可同时管理新生代与老年代。

2. 核心特性

支持Mixed GC,一次回收全部新生代+部分老年代分区,可自定义预期停顿时间,平衡吞吐量与延迟。

3. 适用场景

大堆内存服务端应用,JDK9默认垃圾回收器。

五、面试简答

问:JVM有哪些常见垃圾回收器,分别简单说明特点?

答:

  1. Serial串行收集器:单线程GC,全程STW,适合小内存客户端程序;
  2. Parallel并行收集器:多线程并行回收,侧重吞吐量,JDK8默认,适合批处理任务;
  3. CMS并发收集器:老年代专用,标记清除,大部分阶段并发,STW短,存在内存碎片;
  4. G1收集器:堆分Region,兼顾新生代老年代,可控停顿,JDK9默认,适合大堆线上服务。

Powered by VitePress 1.6.4 | 持续更新中