ZGC的流程图

GC标记过程

1、初始标记

扫描所有线程栈的根节点,然后再扫描根节点直接引用的对象并进行标记。这个阶段需要停顿所有的应用线程(STW),但由于只扫描根对象直接引用的对象,所以停顿时间很短。停顿时间高度依赖根节点的数量,从JDK16开始,已经解决了此问题: https://malloc.se/blog/zgc-jdk16

2、并发标记/并发对象重定位

第1个GC周期:并发遍历上一次标记下引用的对象并标记。

第2个GC周期:并发遍历的过程中,顺便把上周期"并发迁移"阶段迁移的对象指针修正指向到新分区。

3、标记结束/再标记

标记上一次标记过程新产生的对象。并发标记过程中,应用线程可能会产生一些新对象,所以需要再标记出来。这个阶段需要停顿所有的应用线程。(STW),但由于只标记新增的对象,数量很少,所以停顿时间很短。

4、并发转移准备

为对象转移做一些前置准备,比如引用处理、弱引用清理和重定位集选择等。

5、转移开始/初始转移

迁移根节点直接引用的对象到新分区,这个阶段需要停顿所有的应用线程(STW),但由于只迁移根节点直接引用的对象,所以停顿时间很短。

6、并发迁移

并发迁移"并发标记"阶段标记的对象到新分区(对象引用指针未修改,仍指向旧分区)。

4.5、几个问题说明

1、为何并发转移阶段,对象已转移至新分区后,却没有修改线程栈上实际的引用,依然指向旧分区?

因为如果此时再扫描线程栈,修改引用地址,要扫描的量太大,效率太低。

刚好下一个GC周期也要进行扫描标记,可以利用扫描标记的时间,同时把对象引用修正指向到新分区,以此提升效率,减少停顿时间

2、并发转移阶段对象已迁移,但引用指针仍指向旧分区,如何保证旧分区被清理后对象仍然可以访问?

•由于未修改对象引用指针,为防止旧分区被清理,导致对象找不到的问题,此处引入了读屏障和转发表

•转发表记录了对象从旧位置到新位置的映射关系,实现类似一个hash表,key是旧分区的位置,value是新分区的位置,此时当访问旧位置的对象时,通过转发表可以获取新位置。这样可以避免在整个堆空间中更新对象引用的开销,因为只需要更新转发表中的条目即可。

•读屏障的作用是在读取对象引用时,检查对象的标记状态并获取转发表中的映射关系。通过读屏障,ZGC能够在读取对象引用时,将访问重定向到新位置,以确保对象的访问仍然有效。如下图:每次读取引用时会触发一次读屏障

5、GC全流程示意图

此示意图依据JDK11的ZGC理念绘制,尽管在JDK11至JDK17的多个版本迭代过程中,部分技术实现或许发生了变动,然而核心原理依旧保持不变。

GC整个标记流程图如下:

你还在"垃圾"调优?快来看看JDK17的ZGC如何解放双手 | 京东云技术团队

https://blog.51cto.com/u_15714439/9177812

相关推荐
檐下翻书1732 天前
公司组织架构调整工具 在线可视化编辑平台
论文阅读·人工智能·信息可视化·架构·去中心化·流程图
程序员JerrySUN3 天前
别再把 HTTPS 和 OTA 看成两回事:一篇讲透 HTTPS 协议、安全通信机制与 Mender 升级加密链路的完整文章
android·java·开发语言·深度学习·流程图
GOWIN革文品牌咨询3 天前
工业软件越专业越难卖?用“表达可读化”把架构图、流程图、数据图讲清
流程图
min1811234564 天前
PC流程图模板大全 中文定制化满足不同行业需求
架构·pdf·流程图
min1811234564 天前
组织结构图导出PDF 高清无水印在线生成
网络·人工智能·架构·pdf·流程图·copilot
檐下翻书1734 天前
企业组织架构图导出Word 在线编辑免费工具
人工智能·信息可视化·去中心化·word·流程图·ai编程
檐下翻书1734 天前
PC流程图模板大全 中文定制化满足不同行业需求
论文阅读·信息可视化·数据挖掘·数据分析·流程图
xiami_world4 天前
深度评测:5款AI流程图生成工具——图像识别、Mermaid支持与文档解析能力对比
人工智能·ai·信息可视化·ai作画·流程图
a1117764 天前
堆叠式流程图编辑器(html 开源)
开发语言·前端·javascript·开源·编辑器·html·流程图
min1811234564 天前
在线绘制跨职能流程图电脑端简单操作优化部门协作效率
人工智能·系统架构·pdf·流程图