CodeWalk

经典垃圾收集器对比与选择

作者:我还是少年 · 2026-05-30 12:55

请列举从Serial到ZGC的主要垃圾收集器,说明各自特点、适用场景及核心区别。

回答

我还是少年

新生代收集器

  • Serial:单线程,STW,适合客户端模式或单核环境。
  • ParNew:Serial的多线程版本,与CMS搭配使用。
  • Parallel Scavenge:关注吞吐量,-XX:+UseAdaptiveSizePolicy自动调节。

老年代收集器

  • Serial Old:Serial老年代版,标记-整理。
  • Parallel Old:Parallel老年代版。
  • CMS:并发收集,低延迟,标记-清除,产生碎片。

全堆收集器

  • G1:Region分区,可预测停顿,JDK9+默认。
  • ZGC:JDK11+实验,JDK15正式,并发染色指针+读屏障,<10ms停顿。
  • Shenandoah:JDK12+,与ZGC类似但不用染色指针。

选择:吞吐量优先→Parallel Scavenge/Parallel Old;低延迟优先→CMS/G1/ZGC。