NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

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

评论 1 条评论

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

开发者有话说|我的前端开发感悟

国服第二切图仔

个人成长 程序人生

监控平台SkyWalking9入门实践

Java 架构 Skywalking

Vue入门指北——modifier

Augus

Chrome开发者工具 9月月更

故障转移和恢复

源字节1号

软件开发 后端开发

docker的/var/run/docker.sock参数

程序员欣宸

Docker Docker 镜像 9月月更

Chrome操作指南——入门篇(十五)monitor

Augus

Chrome开发者工具 9月月更

N1盒子openwrt+dogcom实现大学校园网的自动登录开启路由

知识浅谈

9月月更

react面试应该准备哪些题目

beifeng1996

前端 React

如何准备vue相关的知识点

bb_xiaxia1998

Vue 前端

这些js手写题你能回答上来几道

helloworld1024fd

JavaScript 前端

前端动效讲解与实战

vivo互联网技术

前端 SVG 动效

详解JS中 call 方法的实现

华为云开发者联盟

Java 前端 企业号九月金秋榜

基于 Apache Hudi 极致查询优化的探索实践

华为云开发者联盟

大数据 后端 华为云 企业号九月金秋榜

【荣耀帐号服务】手把手教你快速Android应用接入

荣耀开发者服务平台

开发者 服务 安卓 应用 honor

Linux安装minikube指南

程序员欣宸

Kubernetes minikube 9月月更

2022前端面试官经常会考什么

beifeng1996

前端 React

React Context源码是怎么实现的呢

flyzz177

React

总结了一下前端高频面试题的答案

loveX001

JavaScript 前端

《DevOps工具链的国产化之道》直播报名开始啦!

嘉为蓝鲸

DevOps IT 工具链 研发

Python基础(五) | 函数及面向过程编程详解

timerring

Python Monad 9月月更

react hook 源码完全解读

flyzz177

React

牛客网扫地僧开源出来的《Java面试无敌流笔记》,Github上线两天就爆火

Geek_0c76c3

Java 数据库 开源 程序员 架构

2022-09-25:给定一个二维数组matrix,数组中的每个元素代表一棵树的高度。 你可以选定连续的若干行组成防风带,防风带每一列的防风高度为这一列的最大值 防风带整体的防风高度为,所有列防风高度

福大大架构师每日一题

算法 rust 福大大

大厂前端面试考什么?

loveX001

JavaScript 前端

20道常被问到的JavaScript题目

helloworld1024fd

JavaScript 前端

太强了!阿里p8大佬干了半个月总结的《Alibaba分布式系统速成笔记》正式开源

Geek_0c76c3

Java 数据库 开源 程序员 架构

【算法实践】手把手带你简单实现希尔排序

迷彩

算法 排序算法 希尔排序 算法实践 9月月更

大数据ELK(四):Lucene的美文搜索案例

Lansonli

9月月更 EKL

Chrome操作指南——入门篇(十四)drawer

Augus

Chrome开发者工具 9月月更

MFC|实现自定义复选框效果

中国好公民st

c++ 控件 9月月更

从0到1带你搭建一个vue3.0项目(vue-cli脚手架版)

国服第二切图仔

前端 vue3.0 9月月更

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