Java最新垃圾回收器ZGC升级:世代ZGC


ZGC ( JEP 333 ) 专为低延迟和高可扩展性而设计。自 JDK 15 ( JEP 377 )以来,它已可用于生产。

ZGC 在应用程序线程运行时完成大部分工作,只是短暂地暂停这些线程。ZGC 的暂停时间始终以微秒为单位;相比之下,默认垃圾收集器 G1 的暂停时间从几毫秒到几秒不等。ZGC 的低暂停时间与堆大小无关:工作负载可以使用从几百兆字节一直到数 TB 的堆大小,并且仍然享受低暂停时间。

对于许多工作负载,仅使用 ZGC 就足以解决与垃圾收集相关的所有延迟问题。只要有足够的资源(即内存和 CPU)可用以确保 ZGC 回收内存的速度快于并发运行的应用程序线程消耗它的速度,这种方法就可以正常工作。

然而,ZGC目前将所有对象存储在一起,不考虑年龄,因此每次运行时都必须收集所有对象。

年轻的对象往往会在年轻时死亡,而旧的对象往往会留下来。因此,收集年轻对象需要更少的资源并产生更多的内存,而收集旧对象需要更多的资源并产生更少的内存。因此,我们可以通过更频繁地收集年轻对象来提高使用 ZGC 的应用程序的性能。

通过扩展 Z Garbage Collector ( ZGC ) 以维护新对象和旧对象的不同代来提高应用程序性能。这将使 ZGC 能够更频繁地收集年轻的对象——它们往往会在年轻时死亡。

Generational(世代 )  ZGC 将堆分为两个逻辑代:年轻代用于最近分配的对象,而老年代用于长期存在的对象。每一代都是独立收集的,因此 ZGC 可以专注于收集有利可图的年轻对象。

Generational(世代 )  ZGC 当前未指定用于任何特定版本的标准 Java。
当前版本JDK 20一周前发布,而下一个版本JDK 21将于 9 月发布。
标准 Java 的发布周期为六个月。