G1 收集器专为以下应用而设计:
- 可以与应用程序线程并发操作。
- 紧凑的可用空间,没有长时间的 GC 引起的暂停时间。
- 需要更可预测的 GC 暂停持续时间。
- 不想牺牲吞吐量。
- 不需要更大的 Java 堆。
从 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 更好。这取决于你需要什么。