垃圾回收器(GC)是 JVM 中的内存管理模块,负责自动回收不再被引用的对象,避免内存泄漏和内存溢出。
核心目标:自动化内存管理、提升系统性能、减少开发者手动干预。
代区 | 回收器 | 特点 |
---|---|---|
新生代(Young) | Serial | 单线程,简单稳定,适合小内存和单核CPU |
ParNew | Serial的多线程版,常与CMS配合 | |
Parallel Scavenge | 多线程,吞吐量优先,适合后台高并发应用 | |
老年代(Old) | Serial Old | Serial的老年代版本 |
Parallel Old | Parallel Scavenge的老年代版本,吞吐量优先 | |
CMS(Concurrent Mark Sweep) | 并发回收,低停顿,适合对响应时间敏感的应用 | |
G1(Garbage First) | 分区回收,低停顿,适合大堆内存和长时间运行的服务端应用 | |
ZGC / Shenandoah | 低延迟、支持大堆,几乎无停顿(JDK11+ 支持) |
GC 收集器 | 适用场景 | 特点 |
---|---|---|
Serial | 单核、Client端 | 简单稳定,单线程 |
ParNew | 多CPU中配合CMS | 多线程,低停顿 |
Parallel | 高吞吐后台、大数据 | 吞吐优先,多线程 |
CMS | 低延迟Web系统 | 并发回收,内存碎片多 |
G1 | 大内存服务端 | 分区,低停顿,预估时间 |
ZGC / Shenandoah | 金融、直播、低延迟场景 | 几乎无停顿,支持大堆 |
1️⃣ CMS 的优缺点?
2️⃣ G1 和 CMS 区别?
3️⃣ ZGC 为什么几乎无停顿?
4️⃣ 什么时候用 Parallel GC?
JVM 提供多款 GC 收集器,如 Serial、Parallel、CMS、G1、ZGC 等。
选择策略看业务需求:
- 吞吐优先选 Parallel
- 响应快选 CMS
- 大堆、低停顿选 G1
- 极致低延迟场景用 ZGC 或 Shenandoah