JDK 18 GC垃圾回收机制比较


从 JDK 18 开始,JDK 附带了四个垃圾收集器 (GC);串行 GC、并行 GC、G1 GC 和 ZGC。在大多数情况下,默认的 GC G1 GC 将是最佳选择。但是,了解 GC 的设计目标可能会有所帮助,并且可能会帮助您实现应用程序的性能目标。本文将对每个 GC 以及何时应该使用它们进行高级研究。

串行垃圾收集器
Serial GC 是 GC 中“最简单的”。它在单个线程上执行所有工作,因此它被命名为“串行”。
Serial GC 最适合在资源有限且 live set 不超过 100 MB 的环境中运行的应用程序。
可以使用 VM 标志启用串行 GC -XX:+UseSerialGC:.

并行垃圾收集器
Parallel GC 在架构上类似于 Serial GC,但在执行其工作时可以使用多个线程。
并行 GC 旨在最大限度地提高吞吐量。因此,吞吐量是最高优先级的应用程序,即使以更长的暂停时间为代价,也是理想的用例。
可以使用 VM 标志启用并行 GC -XX:+UseParallelGC:.

G1 垃圾收集器
Garbage-First, (G1) GC 被指定为 JDK 9 1的默认 GC 。G1 GC 主要是并发 GC,这意味着它可以在应用程序运行时执行工作。
G1 GC 试图在延迟和吞吐量之间取得平衡,并且可以从资源最少的环境扩展到具有大量资源的环境。
G1 GC 是默认 GC,但可以使用 VM 标志显式启用:-XX:+UseG1GC.

Z 垃圾收集器
最新的 GC ZGC 作为 JDK 15 中的生产特性引入。ZGC 也是并发 GC。
ZGC 专注于低延迟,暂停时间很少超过 250 微秒,并且可以将堆大小从 8MB 扩展到 16TB。
可以使用 VM 标志启用 ZGC -XX:+UseZGC: