ZGC,JDK 的最新垃圾回收器 - 一口 Java
Billy Korando 于 2022 年 5 月 30 日
Z 垃圾回收器 (ZGC) 是最新添加到 JDK 的垃圾回收器。ZGC 最初作为 JDK 11 中的实验性功能添加,在 JDK 15 中的 JEP 377 中成为生产功能。在本文中,我们将探讨 ZGC 的目标、如何开始使用它以及 ZGC 的持续开发。
ZGC 概述
ZGC 被设计为低延迟、高可扩展性的垃圾回收器。ZGC 的最大暂停时间很少超过 250 微秒,是的,是微秒,平均暂停时间在几十微秒内。ZGC 高度可扩展,最小堆大小为 8 MB,最大为 16 TB。至关重要的是,暂停时间不会随着堆大小的增加而增加。因此,即使堆大小为几个 TB,暂停时间仍将以微秒为单位进行测量。
虽然 ZGC 提供低延迟和高可扩展性,但这确实以吞吐量为代价,与 G1 相比降低了约 10%。吞吐量的具体降低将取决于应用程序设计、系统架构和业务需求。
使用 ZGC
G1 垃圾回收器被指定为 JDK 9 的默认垃圾回收器,因此要使用 ZGC 需要设置 VM 标志 -XX:+UseZGC
。
在使用 ZGC 时,最重要的配置是设置最大堆大小 -Xmx
。堆大小应足够大以处理应用程序的活动集,并留有额外的空间以允许 GC 发生。可用的堆空间越大,GC 发生的频率就越低,但这需要与内存使用量保持平衡。
ZGC 开发
自 JDK 15 中作为生产功能发布以来,ZGC 一直在持续积极开发。在 JDK 16 中,实现了并发线程堆栈处理 (JEP 376),在 JDK 18 中,StringDeduplication 被添加为可选功能。ZGC 也计划成为多代的,尽管具体时间表尚未确定。
其他阅读材料
编码愉快!