50万奖金+官方证书,深圳国际金融科技大赛正式启动,点击报名 了解详情
写点什么

JEP423:G1 引入区域固定机制,降低 GC 延迟

  • 2024-01-05
    北京
  • 本文字数:855 字

    阅读完需:约 3 分钟

大小:442.91K时长:02:31
JEP423:G1引入区域固定机制,降低GC延迟

在评审结束后,JEP 423(Region Pinning for G1)已经被集成到 JDK 22 中。这个 JEP 旨在通过为G1垃圾回收器实现区域固定来降低 GC 延迟。这使得在 Major GC 和 Minor GC 期间可以固定任意区域,并且可以避免在实现 JNI 关键区域时禁用垃圾回收。


JEP 423 解决了 Java 与 C 和 C++等非托管语言之间的互操作性问题。JNI,作为互操作性的关键组件,允许 Java 应用程序调用其他语言编写的原生应用程序和库,或反过来。它提供了获取和释放Java对象指针的函数,这些函数必须成对使用。在获取和释放指针之间执行的代码被视为关键区域,在此期间,JVM 必须确保 GC 不移动关联的 Java 对象。默认的 GC,即 G1,在这些关键区域中会完全禁用垃圾回收,导致严重的延迟。这种方法通常会导致线程停滞、不必要的内存耗尽,甚至在极端情况下会导致 VM 过早关闭。


G1 引入区域固定从根本上改变了这种方式。JEP 423 允许 G1 在 GC 期间固定包含关键对象的特定内存区域,而不是禁用GC。这是通过在每个区域中维护关键对象的计数来实现的,在获取关键对象时增加计数,在释放时减少。当计数非零时,该区域被视为被固定,不会在 GC 期间被清理。这确保了关键对象不会被移动,避免了禁用 GC,并显著降低了延迟。


这个新特性是 Java 垃圾回收机制的一项重大进步。它旨在解决延迟问题,并在没有活动的 JNI 关键区域存在时保证 GC 停顿时间不出现回归。即使存在这样的区域,回归也是最小的。在 Major GC 和 Minor GC 期间实现区域固定证明了这种解决方案的健壮性。


不过,JEP 423 也存在潜在的风险和假设。一个重大风险是,如果应用程序同时固定多个区域,可能会导致堆内存耗尽。虽然目前没有直接解决方案,但从已经实现了类似机制的Shenandoah GC 来看,这种风险是可控的。


总的来说,JEP 423 为 OpenJDK 的 G1 垃圾回收器引入了重大的技术增强。区域固定特性解决了与 Java 本地接口(JNI)关键区域相关的延迟问题,改进了 JVM 在与非托管语言发生互操作时的垃圾回收处理。这表明了 OpenJDK 在努力完善和优化 Java 性能和互操作性能力方面所做的持续不断的努力。


原文链接

https://www.infoq.com/news/2023/12/region-pinning-to-g1-gc/

2024-01-05 08:005870

评论 1 条评论

发布
用户头像
这是机器翻译吗?
2024-01-05 14:42 · 湖北
回复
没有更多了
发现更多内容

话题讨论 | 对于懂得编程的人来说,编程对你来说有什么乐趣?编程大概是什么感觉?

xcbeyond

话题讨论

Mock | 拦截ajax的两种实现方式

梁龙先森

Java 大前端

架构师训练营第十二周作业

我是谁

极客大学架构师训练营

摄像机不智能,基本等于不讲武德

脑极体

最值得Deepin的思维模型“组合创新” | 技术人应知的创新思维模型 (3)

Alan

创新 思维模型 28天写作

只谈链不谈币,区块链会发展成什么样的方向?

CECBC

区块链

区块链技术生态持续优化,五大趋势不容忽视

CECBC

区块链 场景应用

话题讨论 | 说说那些"Oh my god"的时刻

Kurtis Moxley

话题讨论

架构词典:质量

lidaobing

架构 质量管理

LeetCode题解:102. 二叉树的层序遍历,BFS,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

架构作业--大数据

Nick~毓

Spock单元测试框架实战指南五 - void方法测试

Java老k

Java 单元测试 spock

生产环境全链路压测建设历程第四篇 技术体系的发力

数列科技杨德华

Norns.Urd 中的一些设计

八苦-瞿昙

C# 随笔 随笔杂谈 aop

区块链打破数字医疗桎梏,赢数据未来新生

CECBC

区块链 医疗

如何使用 JuiceFS 在云上优化 Kylin 4.0 的存储性能?

苏锐

大数据 kylin 性能优化 JuiceFS

在构造函数中调用其它构造函数会有什么问题吗?

jiangling500

Java c++ C++11 构造函数

为什么要有 Servlet ,什么是 Servlet 容器,什么是 Web 容器?

yes

tomcat Web Servlet

分布式时序数据库DolphinDB与InfluxDB对比测试报告

DolphinDB

数据库 大数据 Influxdb 性能测试 DolphinDB

C++typename的由来和用法

良知犹存

c++

为什么删除数据后,Redis内存占用依然很高?

Java架构师迁哥

Java并发编程:进程、线程、并行与并发

李尚智

Java并发

学习笔记3

Qx

密码学系列之:明文攻击和Bletchley Park

程序那些事

加密解密 密码学 程序那些事 明文攻击

roblox mini map

katichar

第四章作业

走走,停停……

可见性是什么?(通俗易懂)

叫练

volatile JMM 多线程 synchronized

Flutter技术在会展云中大显身手

京东科技开发者

flutter 跨平台 移动开发

GO 训练营第 3 周总结

Glowry

第三周作业

走走,停停……

有钱还APP系统开发|有钱还软件开发(现成)

系统开发

JEP423:G1引入区域固定机制,降低GC延迟_编程语言_A N M Bazlur Rahman_InfoQ精选文章