写点什么

进击的 ZGC, 带你细品 JDK21 中 ZGC 地进化

作者:摸鱼编程
  • 2023-08-20
    美国
  • 本文字数:432 字

    阅读完需:约 1 分钟

进击的ZGC,带你细品JDK21中ZGC地进化

ZGC 是 JVM 次世代的微秒级别(暂停时间<1ms)的 GC,ZGC 于 JDK15 中正式发布,在 LTS 版本 JDK17 中广泛使用。


JDK17 中的 ZGC 是一个不完整的实现,原因在于:

  1. 因为实现分代困难的原因,该版本中的 ZGC 是非分代 GC

  2. 非分代 GC 就意味着:全局使用一种回收算法,不区分老年代和年轻代。


笔者注:新生代和老年代的对象大小、存活时间都不一样,使用同一种算法就导致中庸,无法做到针对性的优化。


这一点问题将在 JDK21 中得到解决,因为分代式 ZGC 会伴随 JDK21 一起发布。


分代式 ZGC 会把堆划分为新生代和老年代,这将使 ZGC 能够更频繁地收集年轻对象,它们一般存活时间都非常短。


分代式 ZGC 将会带来以下特性:

  1. 更低的 cpu 消耗

  2. 更低的 GC 内存消耗

  3. 更少的分配瓶颈风险


相对非分代 ZGC 依然能保留的特性:

  1. 暂停时间小于 1ms

  2. 支持数百 MB 到更大 TB 的堆大小

  3. 最小化人工配置

  4. 吞吐量不会下降


比如以下这些配置式不需要配置的:

  1. 分代的大小规模,比如老年代多大,新生代多大

  2. 垃圾回收器使用的线程数量

  3. 对象存活多久之后应该晋升到老年代


JDK21 将在 2023-09-19 正式发布,期待这一天的到来。

发布于: 刚刚阅读数: 3
用户头像

摸鱼编程

关注

公众号:摸鱼编程 学习事半功倍的编程技巧 2018-05-27 加入

我是小亢,现某大厂架构师,专注提供java、jvm、架构、finops领域知识。

评论

发布
暂无评论
进击的ZGC,带你细品JDK21中ZGC地进化_jdk_摸鱼编程_InfoQ写作社区