JVM常见垃圾回收器总结
| Serial | Parallel | CMS(Concurrent Mask Sweep) | G1 | |
|---|---|---|---|---|
| 垃圾回收线程和应用线程的并行性 | 串行 | 串行 | 部分并行 | 部分并行 |
| 垃圾回收线程数 | 单个 | 多个 | 多个 | 多个 |
| 垃圾回收算法 | 年轻代:复制,老年代:整理 | 年轻代:复制,老年代:整理 | 年轻代:复制,老年代:标记-清除(不使用整理的目的是减小STW时间) | 年轻代:复制,老年代:通过分区和复制的方式实现了高效的整理 |
| 使用场景 | 小型单机应用,如嵌入式应用 | 批处理应用 | 低延迟,适合交互式应用 | 平衡了延迟和吞吐量,适合大堆应用 |
第一步:确认 JDK 版本
├── JDK8 → G1 或 Parallel
├── JDK11/17 → G1 或 ZGC
└── JDK21+ → ZGC(大幅增强,分代ZGC)
第二步:确认堆内存大小
├── < 1G → Serial 或 Parallel
├── 1G ~ 8G → G1
├── 8G ~ 数十G → G1 或 ZGC
└── 数十G ~ TB → ZGC
第三步:确认核心诉求
├── 吞吐量优先 → Parallel GC
├── 延迟优先 → ZGC / Shenandoah
└── 吞吐+延迟平衡 → G1
