java - Java11 引入的 Z 垃圾收集器有多稳定?
问题描述
我正在使用Java 11
,新的 Z 垃圾收集器(ZGC)看起来很有希望。
文档说它使用了一些低延迟垃圾收集机制,这样GC
暂停时间永远不会超过10 ms
,处理大堆非常好,并允许将未使用的堆内存返回给旧 GC 不存在的操作系统
我担心的是 - ZGC 有多稳定,如果在产品中继续使用它会有风险吗?
谢谢!
解决方案
根据JEP 377页面(2020/05/25 更新):
自从它在 JDK 11 中引入以来,我们收到了积极的反馈,我们已经解决了许多错误,并且我们添加了许多功能和增强功能。强调一些更重要的:
- 并发类卸载
- 取消提交未使用的内存(JEP 351)
- 最大堆大小从 4TB 增加到 16TB
- 最小堆大小减少到 8MB
- -XX:SoftMaxHeapSize
- 支持 JFR 泄漏分析器
- 支持类数据共享
- 有限且不连续的地址空间
- 支持将堆放在 NVRAM 上
- 提高 NUMA 意识
- 多线程堆预触
此外,现在支持所有常用平台:
- Linux/x86_64 (JEP 333)
- Linux/aarch64 (8214527)
- 窗户(JEP 365)
- macOS (JEP 364)
ZGC 的测试表明它是稳定的,并且在撰写本文时,我们已经有几个月没有收到新的 ZGC 特定错误了。凭借 ZGC 今天所拥有的稳定性、功能集和平台支持,是时候移除其实验状态并使其成为产品功能了。
几个警告:
- 这来自从事 ZGC 项目的团队。他们可能并不完全客观。(这只是人性......)。
- 这取决于有多少人(团队和用户)正在测试/试用新的 GC。
- 这取决于他们正在测试/尝试什么,以及这是否与您打算做的事情相匹配。
- 对于像新的 Java GC 这样复杂的东西,一些错误可能需要数年时间才能以可重现的形式出现。
因此,虽然很有希望,但这并不能算作稳定性的可量化衡量标准,也不能提供风险的可量化衡量标准。
推荐阅读
- c# - 是否有在 VSCode 中快速运行 C# 的键绑定
- unity3d - 如何在应用程序终止时发送 Web 请求?
- javascript - 如何向 roundSlider 小部件添加启用/禁用按钮?
- java - 使用 Spark SQL 将 CCYYMMDD 日期格式转换为 DDMMYYYY 格式
- python - python的cmake execute_process抛出“权限被拒绝”错误
- python - Tensorflow 1.14+ 序列化子类 Keras 层?
- kml - ScreenOverlay 方向
- firebase - 如何使只有保存字符串的用户才能看到 Flutter / Firebase
- mongodb - 如何使用 mongodb 和 nodejs 中的聚合来查看集合以进行插入和删除?
- asp.net-mvc - 在 ASP.NET MVC 应用程序的本地 IIS 部署期间“加密操作期间发生错误”