常见垃圾回收器

🔹1、Serial 回收器(单线程)

特点:单线程执行 GC,STW(Stop-The-World)时间长
适用:单核、客户端场景
优点:实现简单,内存开销低
缺点:GC 期间会暂停所有用户线程

🔹2、Parallel GC(吞吐量优先收集器)

Parallel GC 是 JDK 8 的默认垃圾回收器,它主要关注高吞吐量,适合后台任务较多、对响应时间不敏感的场景。


image.png
🔹3、 ParNew 回收器(多线程 Serial)

特点:Serial 的多线程版本,用于新生代
常与 CMS 配合使用
适用:多核机器,响应优先

🔹4、 CMS(Concurrent Mark Sweep)回收器(并发)

目标:低停顿、可并发地回收老年代

流程:
初始标记(STW)
并发标记
重新标记(STW)
并发清除

缺点:
会产生碎片(需要 Full GC )
对 CPU 敏感
会出现“concurrent mode failure”(并发失败)

🔹 5、 G1(Garbage First)回收器(重点推荐,JDK 9 默认)

特点:
面向服务端,可预测停顿时间
将堆划分为多个区域(Region)
混合收集:可同时回收新生代和老年代

优点:
并发、并行处理
停顿可控(用户可指定 MaxGCPauseMillis)
避免内存碎片

缺点:比 CMS 更复杂、延迟回收较高

🔹 6、 ZGC(JDK 11+) 和 Shenandoah(JDK 12+)

目标:超低延迟(<10ms)

ZGC 特点:
支持非常大的堆(TB 级别)
GC 停顿时间非常短(通常几毫秒)
多线程、并发整理

JDK 15 开始,ZGC 已成为正式可用的生产级 GC。

image.png

JVM 中的垃圾回收器用于回收堆中的无用对象。不同的回收器适用于不同的场景:

Serial 是最基础的单线程回收器,适用于小内存;
CMS 是低停顿的老年代回收器,适用于对响应时间要求高的场景;
G1 是现在主流的回收器,支持分区、混合收集,适合大内存、可预测停顿;
JDK 11 以后还有 ZGC、Shenandoah 等更先进的回收器,追求极低延迟。

在实际项目中,应根据 系统对延迟、吞吐、内存大小的要求选择合适的 GC 策略,并结合 -XX:+UseG1GC 等 JVM 参数调优。

什么是 STW(Stop-The-World)?

STW(Stop-The-World) 是 JVM 垃圾回收中的一个过程,它会暂停所有用户线程,让 GC 线程独占 CPU,完成垃圾回收的关键阶段。

✅ 简单理解:
当发生 GC(不管是 Minor GC 还是 Full GC)时,JVM 会:暂停应用程序中的所有线程(即业务代码停止运行),开始执行某些不能并发执行的 GC 步骤,回收完后再恢复用户线程,这个过程就叫 STW。

⏱️ 二、为什么会有 STW?必须停顿吗?
是的,STW 是必须的,主要原因有两个:

  1. 为了保证堆结构的一致性(安全点)
    Java 对象之间有复杂引用关系(指针结构),GC 在清理时需要保证堆内存状态不被其他线程修改,否则容易出现对象“正在被使用、但 GC 以为没人用”的错判(悬空引用),JVM 会在“安全点(Safe Point)”统一暂停所有线程,确保 GC 能看到一个一致的内存快照。

  2. GC 的某些阶段无法并发(如标记/清理/压缩)
    例如 CMS 的“初始标记”“重新标记”,G1 的“初始标记”等,这些阶段必须暂停所有线程,保证回收结果正确

📊 三、STW 可能在哪些 GC 中出现?


image.png

四、STW 的影响

  • 用户感知的卡顿:比如页面点击卡一下、系统响应延迟等,尤其是 Full GC
  • 吞吐量下降:应用线程暂停,CPU 被 GC 占用
  • 延迟不确定:某些 GC(如 Serial、CMS)在大堆下可能 STW 持续很久(秒级)

🛠️ 五、如何减少 STW 停顿时间?
✅ 使用 G1、ZGC、Shenandoah 等低停顿回收器
✅ 减小堆内存(减少 GC 处理的对象量)
✅ 减少老年代对象晋升(优化对象生命周期)
✅ 提高 -Xmx 和 -Xms 一致性,减少频繁 GC
✅ 手动调用 System.gc() 慎用(会触发 Full GC)
✅ 使用 JVM 参数观察 GC 行为(如 -XX:+PrintGCDetails)

🎯 总结一波(适合面试回答):
STW(Stop-The-World) 是 JVM 在执行 GC 时必须暂停所有应用线程的机制,它保证了堆内存的一致性,使得 GC 能安全执行对象的标记和清理操作。

所有 GC 都存在 STW,只是不同 GC 对暂停时间的优化程度不同。例如 Serial 和 CMS 会有较明显的停顿,而 G1、ZGC 等现代 GC 则通过并发机制显著缩短停顿时间。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容