常见 GC 垃圾收集器对比分析
大家好,这里是架构资源栈!点击上方关注,添加“星标”,一起学习大厂前沿架构!
Java 虚拟机中存在多种垃圾收集器,各有优劣,适用于不同的业务场景。下面我们对常见的几种垃圾收集器进行系统性梳理与对比,助你在日常开发与性能调优中游刃有余。
1. Serial 收集器(串行收集器)
特点:单线程、Stop The World。
工作方式:新生代使用复制算法,老年代使用标记-整理。
优点:实现简单,内存占用少,适合单核环境或内存较小的场景。
缺点:GC 期间所有用户线程停顿,影响体验。
✅ 适合场景:单核处理器、Client 端应用、小内存部署。
2. ParNew 收集器
特点:Serial 的多线程版本,支持并行收集新生代。
工作方式:新生代使用复制算法,常与 CMS 搭配使用。
优点:多核 CPU 环境下比 Serial 更高效。
缺点:老年代仍需配合 CMS,否则效果一般。
✅ 适合场景:多核 CPU + CMS 收集器组合。
3. CMS(Concurrent Mark Sweep)收集器
特点:老年代并发收集,响应时间优先。
工作方式:标记-清除,采用“初始标记 → 并发标记 → 重新标记 → 并发清除”四步。
优点:
并发回收,停顿时间短。
用户线程与 GC 线程并发执行,提升响应性。
缺点:
会产生内存碎片。
可能出现“Concurrent Mode Failure”,需要预留空间进行 Full GC。
✅ 适合场景:对响应时间敏感的应用,如电商、交易系统。
4. G1(Garbage First)收集器
特点:面向服务端,兼顾吞吐与低停顿。
工作方式:将堆划分为多个 Region,混合使用多种算法,采用并发标记 + 并发压缩。
优点:
支持大堆(>4GB)。
可预测的低延迟,GC 可配置暂停时间(-XX:MaxGCPauseMillis)。
内存整理后无碎片。
缺点:
单次 GC 性能略低于 CMS。
调优复杂。
✅ 适合场景:对响应延迟和吞吐有双重要求的大型服务系统。
5. ZGC(Z Garbage Collector)
特点:低延迟收集器(Pause < 10ms),JDK11+。
工作方式:Region + 并发标记 + 并发重定位,使用着色指针。
优点:
停顿时间极短,<10ms。
支持大内存,最高达 16TB。
缺点:
暂不支持 Mac、JDK8。
吞吐量稍逊于 G1。
✅ 适合场景:超大堆内存、低延迟系统,如金融风控、在线推荐系统。
6. Shenandoah 收集器
特点:OpenJDK 社区开发,低延迟收集器(Pause < 10ms),JDK12+。
工作方式:Region 化 + 并发标记 + 并发压缩,支持并发整理堆。
优点:
停顿时间短,几乎与堆大小无关。
支持压缩,内存碎片少。
缺点:
吞吐略低。
需要额外 CPU 资源支持并发标记。
✅ 适合场景:注重低停顿、超大堆、追求实时体验的业务。
GC 收集器对比总结表格
收集器
新生代算法
老年代算法
并发/并行
停顿时间
吞吐量
特点
Serial
复制
标记-整理
无
长
高
单线程,简单可靠
ParNew
复制
标记-整理
并行
中
高
CMS 搭档,支持多线程
CMS
复制
标记-清除
并发
短
高
响应快,但有内存碎片
G1
复制 + 整理
标记-整理
并行 + 并发
可调
中高
面向大内存,支持预测暂停
ZGC
标记-整理
标记-整理
全并发
极短
中
支持 16TB,大内存低延迟
Shenandoah
标记-整理
标记-整理
全并发
极短
中
停顿时间与堆大小无关
阴阳师椒图碎片哪里刷 阴阳师椒图碎片在哪个副本
摸爬滚打是什么意思