写点什么

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

评论 1 条评论

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

产品更新 | 数据集成ETLCloud V3.9 社区版发布,新增及优化组件近20项

谷云科技RestCloud

ETL 数据集成平台 集成工具

YashanDB进程线程体系

YashanDB

数据库 yashandb

YashanDB模式对象

YashanDB

数据库 yashandb

活动推荐:2025 RISC-V 生态大会将在北京召开,龙蜥受邀参展

OpenAnolis小助手

操作系统 risc-v 龙蜥社区

用户实操:如何以龙蜥操作系统为底座在 CPU 上运行 DeepSeek-R1

OpenAnolis小助手

AI 龙蜥社区 龙蜥操作系统 Anolis OS DeepSeek

Anolis OS深度集成运维利器 阿里云操作系统控制台上线

OpenAnolis小助手

运维 操作系统 内存 操作系统控制台

Paxos算法:如何解决分布式系统中的共识问题?

不在线第一只蜗牛

分布式 算法

企业为什么要选择IPLC定制方案?

Ogcloud

IPLC 国际专线 国际网络专线 IPLC定制

YashanDB模式

YashanDB

数据库 yashandb

YashanDB表介绍

YashanDB

数据库 yashandb

低代码技术赋能:企业级固定资产管理系统2小时快速构建实践

不在线第一只蜗牛

低代码

vivo 互联网技术 2024年度盘点

vivo互联网技术

互联网技术 Vivo

AI 引领,共创数字新篇|第六届金蝶云苍穹追光者开发大赛圆满落幕!

金蝶云·苍穹

AI 开发者大赛 金蝶云苍穹 AI Agents

企业上云怎么选?公有云、私有云和混合云对比解析

Ogcloud

公有云 私有云 企业上云 混合云

JNPF 5.2版本 “低代码+AI” 双引擎

引迈信息

YashanDB应用程序与网络体系

YashanDB

数据库 yashandb

Blackbox.ai:一站式AI代理,畅享顶级模型

Yan-英杰

人工智能 DeepSeek v3

面试官:谈谈RabbitMQ的队头阻塞问题?

王磊

Vue.js 与低代码开发:在制造业中的创新应用

秃头小帅oi

信创国产操作系统中的轻量级CAD画图软件

WEB CAD SDK

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