分代 ZGC - Java 细品

Z 垃圾收集器,通常缩写为 ZGC,在 JDK 21 中获得了重大更新。ZGC 现在是一个多代垃圾收集器,通常称为分代 ZGC 或 GenZGC。让我们来看看 ZGC 的这次更新!

多代垃圾收集器

多代垃圾收集器,或简称分代垃圾收集器,是将堆逻辑地划分为两个区域的垃圾收集器。一个年轻区域和一个老区域。这样做是为了利用弱代假设,该假设认为许多对象在创建后不久就会死亡。

当分配新对象时,它们最初会被放置在年轻区域。

垃圾收集器会频繁地扫描年轻区域,寻找死亡对象。如果一个对象在足够多的 GC 周期中存活下来,它就会被提升到老区域,老区域的扫描频率较低。这种设计允许垃圾收集器通过专注于更可能包含死亡对象的堆的一部分来更有效地利用 CPU 资源。

使用分代 ZGC

ZGC 最初发布时是一个单代垃圾收集器。从 JDK 21 开始,除了单代之外,ZGC 中现在也提供了多代支持。要使用 GenZGC,需要传递两个 VM 参数

$ java -XX:+UseZGC -XX:+ZGenerational ...

计划是将 GenZGC 设为默认值,并最终弃用和删除单代 ZGC,但这种过渡的时间表尚不确定。

其他阅读材料

JEP 439 - 分代 ZGC

分代 ZGC 及其未来 - JVMLS 2023

Java 21 JVM & GC 改进 #RoadTo21

分代垃圾收集器

祝您编码愉快!