(10)《垃圾回收器对比》

2026-03-21
1
-
- 分钟
|

核心定位:不同GC针对不同场景优化(吞吐量 vs. 低延迟 vs. 大内存)。

注:CMS在JDK 9+已弃用,G1为默认推荐;ZGC/Shenandoah为现代低延迟方案(未详述,需额外配置)。


SerialGC

  • 适用场景:小型应用、单CPU桌面环境(如开发测试)。
  • 机制
    • 单线程,新生代(复制算法)、老年代(标记-整理)。
    • STW(Stop-The-World)全程暂停应用。
  • 特点
    • ✅ 低内存开销,简单高效。
    • ❌ STW长(>1s),吞吐量低,不适用于生产环境
  • 启用:默认GC,无需参数(-XX:+UseSerialGC)。

ParallelGC(Throughput GC)

  • 适用场景:高吞吐量需求(如批处理、数据计算)。
  • 机制
    • 多线程(新生代:Parallel Scavenge;老年代:Parallel Old)。
    • 专注最大化吞吐量(减少GC时间占比)。
  • 特点
    • ✅ 吞吐量高(CPU密集型场景最佳)。
    • ❌ STW较短,但停顿时间仍较长(比CMS长)。
  • 关键参数
    • -XX:+UseParallelGC(新生代+老年代并行)。
    • -XX:ParallelGCThreads=N(控制线程数,建议=CPU核心数)。

CMS(Concurrent Mark Sweep)

⚠️ JDK 9+已弃用,G1是其替代品。

  • 适用场景:低延迟要求(如Web服务,停顿<200ms)。
  • 机制
    • 并发标记-清除(仅初始标记+最终标记STW,其他阶段应用线程运行)。
    • 依赖Remembered Set优化跨代引用。
  • 特点
    • ✅ 低停顿(STW<100ms)。
    • ❌ 碎片化严重(需-XX:+UseCMSCompactAtFullCollection压缩);
      ❌ 需额外20%内存(并发阶段占用);
      ❌ Full GC仍STW长。
  • 启用-XX:+UseConcMarkSweepGC

G1 vs. 其他GC对比

特性SerialGCParallelGCCMSG1
核心目标简单高效高吞吐量低延迟平衡吞吐+低延迟
STW停顿时间长 (>1s)中 (100-500ms)短 (<200ms)极短 (<200ms)
适用内存小 (<4GB)中/大中/大超大 (>4GB)
碎片化处理标记-整理标记-整理无(需手动压缩)标记-整理(Region内)
JDK 9+推荐❌(弃用)✅ 默认

关键结论

  • 生产环境优先选G1(平衡性最佳)。
  • 旧系统遗留CMS需迁移到G1;新项目无需手动配置GC。
评论交流

文章目录