写点什么

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:007705

评论 1 条评论

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

重学设计模式——你真的面向对象了吗?

黄林晴

设计模式

【案例】替代进口数仓,星环科技助力北京银行建设新一代大数据平台

星环科技

数据库

「国产替代」,真的是中国SaaS的发展路径吗?

ToB行业头条

【愚公系列】2022年03月 Docker容器 Windows11安装Docker Desktop

愚公搬代码

3月月更

GDP Streaming RPC 设计

百度Geek说

后端 RPC Go 语言

直播预告 | PolarDB-X 动手实践系列——如何在 PolarDB-X 中优化慢 SQL

阿里云数据库开源

数据库 大数据 阿里云 开源 polarDB

2021年第4季度规模达1381.8亿元!跨境电商结合酒店场景将成亮点

易观分析

跨境电商

英特尔Sierra Forest,市场最需要的能效核至强处理器

科技新消息

在华外企高管谈政府工作报告:共享发展成就 未来机遇可期

科技新消息

基于冬奥示范效应,数字孪生将助力建筑运维和集会安全运营

易观分析

数字孪生

专注自主研发,加速大数据基础软件国产化进程

星环科技

数据库 大数据 基础软件

图文详解:Kafka到底有哪些秘密让我对它情有独钟呢?

浅羽技术

适用于企业的销售自动化CRM系统

低代码小观

销售管理 CRM CRM系统 客户关系管理系统 企业管理软件

医疗数字化,星环科技ArgoDB+KunDB统一分布式数据库解决方案来了

星环科技

数据库 医疗安全

2022官方文档部署MAVEN最新最全

北极的大企鹅

中间件 环境安装 部署与维护

网络安全kali web安全 Kali之msf简单的漏洞利用

学神来啦

网络安全 渗透测试 WEB安全 kali kali Linux

教你如何搭建一个骗子举报/信息查询的平台

H

搭建平台 网络安全信息安全、

「前端CI/CD系列」第三篇:如何用建木CI构建前端项目并部署到CDN

Jianmu

开源 前端 CDN 七牛云 建木CI

python方法——defaultdict详解

Wjq

Python 字典 3月程序媛福利 3月月更 defaultdict

活动预告 | ArchSummit全球架构师峰会

第四范式开发者社区

人工智能 机器学习 数据库 架构师 热门活动

同人于野,平常无边 | 对话 StarRocks 的三位女性工程师

StarRocks

数据工程师 38妇女节

数字孪生:如何撑起一个万亿市场的产业变革?

知心宝贝

行业资讯 数字孪生 冬奥 3月月更

还在用递归,试试迭代吧

爱笑的小雨

把家电科技产出摆出来!三家实力一目了然

脑极体

基于 Apache ShardingSphere 构建高可用分布式数据库

SphereEx

Apache 开源 分布式 ShardingSphere SphereEx

一日为期,极行千里 ——「企业级零代码黑客马拉松」正式启动报名

明道云

低代码 零代码 企业 黑客马拉松

技术平台&应用开发专题月 | 如何打造强大的K8S集群

用友BIP

用友 用友iuap

DPDK uio 分析 丨DPDK的优势及学习总结

Linux服务器开发

Linux服务器开发 DPDK Linux后台开发 高性能网络 网络虚拟化

堪比JMeter的.Net压测工具 - Crank 入门篇

MASA技术团队

C# .net 微软 测试 压测

华为被卡脖子,到底卡的是什么?

坚果

对容器在野安全问题的观测和分析

腾讯安全云鼎实验室

网络安全 容器安全 在野攻击

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