简短比较三个 Java现代垃圾回收器

最新版本的 Java 中引入了三个现代垃圾收集器,以下是三个场景比较:

G1 收集器专为以下应用而设计:

  • 可以与应用程序线程并发操作。
  • 紧凑的可用空间,没有长时间的 GC 引起的暂停时间。
  • 需要更可预测的 GC 暂停持续时间。
  • 不想牺牲吞吐量。
  • 不需要更大的 Java 堆。
因此,G1 收集器更像是一个稳定且通用的解决方案,除非您对短暂停时间有特定要求。
从 Java 9 开始,G1 是默认的垃圾收集器。

ZGC专为以下应用而设计:

  • 需要较短的暂停时间和/或使用非常大的堆(数 TB)。
  • 要求对大量GC 操作具有稳定的响应能力。
  • 托管在 Linux x86 64 位系统上(当前支持,ARM 正在进行中)。
  • 使用 JDK 11+。

Shenandoah专为以下应用而设计:

  • 无论堆大小(低或高),都需要较短的暂停时间。
  • 要求对大量GC 操作具有稳定的响应能力。
  • 托管在 Linux 或 ARM x86 32 位和 64 位上。
  • 仍在使用 JDK 8(可以使用下游向后移植到 OpenJDK 8u)。

没有一个 GC 比其他 GC 更好。这取决于你需要什么。