写点什么

Java ZGC 垃圾收集器全面增强

  • 2023-08-15
    北京
  • 本文字数:1388 字

    阅读完需:约 5 分钟

Java ZGC 垃圾收集器全面增强

在 JDK 21 中,JEP 439(分代ZGC)从 Targeted 状态提升到 Completed 状态。该 JEP 建议,扩展 Z Garbage Collector(ZGC),为年轻对象和老对象维护单独的代,从而提高应用程序的性能。这将使得 ZGC 可以更频繁地收集趋于早亡的年轻对象。

 

Z Garbage Collector 专为低延迟和高可扩展性而设计,从 JDK 15 开始就可用于生产环境。它的大部分工作都是在应用程序线程运行过程中完成的,只会短暂中断这些线程。ZGC 的暂停时间以微秒为单位进行持续的测量,这使得它成为低延迟、高可扩展工作负载的首选。

 

新一代 ZGC 旨在降低分配停顿的风险,减少所需的堆内存开销,并减少垃圾收集的 CPU 开销。与非分代 ZGC 相比,这些优点预计并不会显著降低吞吐量。非分代 ZGC 的基本性质保持不变,如暂停时间不超过 1 毫秒,支持的堆大小从几百 MB 到许多 TB。

 

分代 ZGC 基于弱分代假说,即年轻对象往往会在年轻时死去,而老对象往往会保留下来。通过更频繁地收集年轻对象,ZGC 可以提高应用程序的性能。

 

最初,分代 ZGC 与非分代 ZGC 是一起提供的。用户可以在-XX:+UseZGC命令行选项中添加-XX:+ZGenerational选项,以选择 Generational ZGC。在未来的版本中,分代 ZGC 将成为默认选项,最终,非分代 ZGC 将被删除。

$ java -XX:+UseZGC -XX:+ZGenerational ...
复制代码

 

新的分代 ZGC 将堆划分为两个逻辑代:年轻代用于最近分配的对象,老年代用于长期对象。每个代独立收集,让 ZGC 可以专注于收集有利可图的年轻对象。

 

分代 ZGC 引入了多个使其不同于非分代 ZGC 和其他垃圾收集器的设计概念,包括无多重映射内存、优化屏障、双缓冲记忆集、无追加堆内存重定位、密集堆区域、大对象和完整垃圾收集。

 

分代 ZGC 的引入可以大幅提升在 Java 平台上运行应用程序的性能。通过更频繁地收集年轻对象,分代 ZGC 可以带来更低的延迟、更少的内存开销和更高的 CPU 利用率。这使得它在大多数用例中都成为比非分代 ZGC 更好的解决方案。

 

它引入了一个更复杂的系统。该系统在加载和存储屏障中使用了显式代码,并且并发运行两个垃圾收集器。新系统不使用多重映射内存,使用户更容易测量堆内存的使用情况,并可能将最大堆大小增加到超过非分代 ZGC 的 16TB 限制。加载和存储屏障使用快速路径和慢速路径、记忆集屏障、SATB 标记屏障、融合存储屏障检查和存储屏障缓冲等技术进行了优化。分代 ZGC 还引入了双缓冲记忆集,用于准确跟踪代际指针,并允许重定位,而且不需要额外的堆内存,进而实现高效的年轻代收集。该系统还可以很好地处理大对象,允许将它们分配给年轻代,而如果它们的寿命比较长,就将它们提升到老年代。完整垃圾收集将年轻代对象指向老年代对象的指针视为老年代对象图的根。

 

总之,OpenJDK 中的分代 ZGC 实现引入了一个更为复杂的系统,它并发运行两个垃圾收集器,并使用更复杂的屏障和染色指针(coloured pointer)。尽管复杂,但长期目标是用分代版本完全替换非分代 ZGC,以最小化维护成本。虽然大多数用例都有望从分代 ZGC 中受益,但一些非分代工作负载可能会出现轻微的性能下降。不过,因为不必频繁地收集老年代的对象,所以可以认为潜在的开销已被抵消。分代 ZGC 未来的改进和优化将由基准测试和用户反馈所驱动。分代 ZGC 的引入是提高 Java 平台应用程序性能的重要一步。

 

原文链接:

https://www.infoq.com/news/2023/07/java-enhance-zgc/


相关阅读:

Java 近期新闻:Micronaut 4.0、Payara 平台、Spring Web Flow 3.0、JetBrains AI 助手

Java 新特性完整指南:Switch 模式匹配

2023-08-15 08:007110

评论 1 条评论

发布
用户头像
“在未来的版本中,分代 ZGC 将成为默认选项,最终,非分代 ZGC 将被删除。”这里不太对,java21发布版本是非分代的。
2023-11-22 17:13 · 北京
回复
没有更多了
发现更多内容

一文教会你如何用好通义灵码,让这款 AI 编码工具帮你做更多工作,更高效

阿里巴巴云原生

阿里云 云原生 通义灵码

Next.js的一次cookies处理过程

麦兜

活动回顾|矩阵起源亮相第15届中国数据库技术大会DTCC

MatrixOrigin

深度挖掘 1688 商品评论数据接口,洞察用户心声

tbapi

1688商品评论接口 1688API

我的 Linux 利器

玄兴梦影

Linux

首个大数据批流融合国家标准正式发布,阿里云为牵头起草单位!

阿里云大数据AI技术

大数据 阿里云 信息技术 国家标准

NineData云原生智能数据管理平台新功能发布|2024年8月版

NineData

DevOps 数据迁移 数据管理 新功能 NineData

生成式AI的天命:“不疯魔,不成活”!

博文视点Broadview

企业转型新引擎:JNPF低代码平台的数智化解决方案

不在线第一只蜗牛

低代码 数字化

Python实现动图生成:轻松创建自定义表情包

幂简集成

API

「邀您参会」9月20日 中国可观测日成都站

观测云

可观测性

站在 AI、DePIN 蓝海赛道交汇处,MelosBoom 如何带用户捕获市场红利

股市老人

“创造神迹” -> “打造利器”:AI 从实验室走向市场的五大障碍

Baihai IDP

程序员 AI LLMs 企业 9 月 PK 榜 AI 产品

XIAOJUSURVEY vs Google Forms(一)

XIAOJUSURVEY

表单 问卷 竞品分析 调研系统 googleform

NFT铸造挖矿交易系统开发部署搭建

V\TG【ch3nguang】

黑神话 悟空|风灵月影 V1.0-35项修改器

理理

一文教会你如何用好通义灵码,让这款 AI 编码工具帮你做更多工作,更高效

阿里云云效

阿里云 云原生 通义灵码

一本书加印19次,回答小伙伴们几个写书的疑问

江南一点雨

数智化浪潮下,看JNPF低代码平台如何助力企业成功转型

快乐非自愿限量之名

低代码 数智化 JNPF

IntelliJ IDEA激活教程,2024年永久破解方法

大师兄

IDEA idea激活码 idea破解教程

深智城基于超融合数据库MatrixOne的一站式交通大数据平台改造

MatrixOrigin

数据库 深圳

创业者必看!游戏直播平台开发策略,助你在饱和市场脱颖而出

软件开发-梦幻运营部

Serverless 应用引擎 SAE 助力袋拉拉研发提效 70%

阿里巴巴云原生

阿里云 Serverless 云原生

每个端侧产品都需要的用户体验监控

阿里巴巴云原生

阿里云 云原生

第66期 | GPTSecurity周报

云起无垠

Java ZGC 垃圾收集器全面增强 _编程语言_A N M Bazlur Rahman_InfoQ精选文章