JVM垃圾收集器(GC)类型
主要GC类型:
-
Serial GC
- 单线程收集器
- 适用于单核处理器或小应用
-
Parallel GC(Paraller Scavenge)
- 多线程新生代收集器
- 注重吞吐量优化
-
CMS(Concurrent Mark Sweep) GC
- 并发收集器
- 减少停顿时间
-
G1(Garbage First) GC
- 分区收集器
- 可预测停顿时间
-
ZGC/Shenandoah
- 超低延迟收集器
- JDK 11+支持
GC 类型 vs GC 行为
5 种主要 GC 类型:
Serial GCParallel GCCMS GCG1 GCZGC/Shenandoah
2 种 GC 行为:
Minor GC:清理新生代Full GC:清理整个堆(包括新生代和老年代)
关系说明
每种 GC 类型都会执行这两种 GC 行为:
- Minor GC 是所有 GC 类型都有的行为,专门清理
Young Generation - Full GC 也是所有 GC 类型都可能触发的行为,清理整个堆内存
例如:
- 使用
G1 GC时会发生Young GC(相当于 Minor GC) 和Mixed GC/Full GC - 使用
CMS GC时会发生Minor GC和CMS GC(相当于 Full GC)
所以 Minor GC 和 Full GC 是垃圾回收的作用范围和触发条件的分类,而不是独立的 GC 收集器类型。
Minor GC与Full GC区别
Minor GC(年轻代GC)
- 作用范围 : 只清理
新生代(Young Generation) - 触发条件 :
- Eden区空间不足时自动触发
- 特点 :
- 执行速度快
- 发生频率高
- 清理大量短生命周期对象
- STW(Stop-The-World)时间短
Full GC(老年代GC)
- 作用范围: 清理整个堆内存(包括新生代和老年代)
- 触发条件 :
- 老年代空间不足
- 方法区(元空间)满
- 显式调用
System.gc() - Minor GC后存活对象无法放入Survivor区或老年代
- 特点 :
- 执行速度慢
- STW时间长
- 影响应用性能
- 通常伴随内存整理操作
性能对比
| 特性 | Minor GC | Full GC |
|---|---|---|
| 扫描范围 | 新生代 | 整个堆 |
| 执行时间 | 毫秒级 | 秒级甚至更长 |
| 触发频率 | 高 | 低 |
| 对应用影响 | 小 | 大 |
| 算法复杂度 | 简单 | 复杂 |