进击的 ZGC, 带你细品 JDK21 中 ZGC 地进化
ZGC 是 JVM 次世代的微秒级别(暂停时间<1ms)的 GC,ZGC 于 JDK15 中正式发布,在 LTS 版本 JDK17 中广泛使用。
JDK17 中的 ZGC 是一个不完整的实现,原因在于:
因为实现分代困难的原因,该版本中的 ZGC 是非分代 GC
非分代 GC 就意味着:全局使用一种回收算法,不区分老年代和年轻代。
笔者注:新生代和老年代的对象大小、存活时间都不一样,使用同一种算法就导致中庸,无法做到针对性的优化。
这一点问题将在 JDK21 中得到解决,因为分代式 ZGC 会伴随 JDK21 一起发布。
分代式 ZGC 会把堆划分为新生代和老年代,这将使 ZGC 能够更频繁地收集年轻对象,它们一般存活时间都非常短。
分代式 ZGC 将会带来以下特性:
更低的 cpu 消耗
更低的 GC 内存消耗
更少的分配瓶颈风险
相对非分代 ZGC 依然能保留的特性:
暂停时间小于 1ms
支持数百 MB 到更大 TB 的堆大小
最小化人工配置
吞吐量不会下降
比如以下这些配置式不需要配置的:
分代的大小规模,比如老年代多大,新生代多大
垃圾回收器使用的线程数量
对象存活多久之后应该晋升到老年代
JDK21 将在 2023-09-19 正式发布,期待这一天的到来。
版权声明: 本文为 InfoQ 作者【摸鱼编程】的原创文章。
原文链接:【http://xie.infoq.cn/article/b1088c30f65007313f39917bf】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论