图解ZGC

news/2024/11/28 10:49:58/

图解ZGC

简介

支持的版本

目标

jdk11版本最大可以支持4TB内存 
jdk13最大可以支持16TB内存
最大停顿时间在10毫秒以内
吞吐量最多降低15%即假设不用ZGC需要1000毫秒才可以回收完
用ZGC最多需要1150毫秒可以回收完
这个影响不大 反正stw时间缩小了

暂时不分代

ZGC底层算法比较🐂,实现分代还比较麻烦,目前还未做到分代
现在还是简单的版本,后续可能会做到分代
即目前还未解决对象生命周期不一致的情况

分代的必要性

对象是有生命周期的
年轻代都是朝生夕死的对象
老年代都是一些老不死的对象
如果老年代和年轻代一样朝生夕死 那还得了
整个堆时时刻刻要做GC

ZGC内存布局

和G1类似 都是分成一个一个小的内存区域
区别是没有分代的概念了
只有小型、中型、大型的区域区分

重要概念

NUMA

UMA 统一内存访问架构
所有的CPU都同时访问内存
那么就会涉及到内存的争抢
争抢失败会有锁竞争 
即使使用CAS还是有损耗
但是使用UNMA会避免这种情况
UMA
UMA
多个CPU同时访问同一块内存
每个cpu访问不同的内存块
每个内存块允许特定cpu具有优先访问权
避免了分配内存和使用内存资源争抢的问题
ZGC底层可以自动识别NUMA架构

ZGC运作过程

gc过程最耗时的阶段是并发标记和并发清理
zgc将并发清理阶段分成了并发预备重分配、并发重分配阶段
G1在筛选回收阶段是STW的
Shenandoah基于G1的 相当于G1的升级版本
G1中很多未实现的功能在Shenandoah中都有实现 
比如Shenandoah就在筛选回收阶段实现了并发

并发标记

G1和CMS在并发标记阶段有一个三色标记
这些标记都在对象头的gc标记上
ZGC不会将标记信息放在对象内部
而是放在对象存储的内存空间那个指针上面
这就是颜色指针

并发预分配

类比g1的计算回收收益比
看看哪些region需要回收
哪个region回收收益比高
计算好之后 zgc不是马上去清理 g1此时会马上清理

每次gc都会扫描所有的region 
没有g1中的卡表(remember set 记忆集)的维护成本

并发重分配

将存活对象复制到另一块区域
那么这些对象的引用地址都变了
如果是g1的话筛选回收阶段 因为它是stw的
将对象复制过来之后 就会立马修改引用
但zgc这个过程是和用户线程并发执行的
所以不能直接将老的引用地址修改为新的
zgc是通过读屏障实现的
当读取到老的引用的之后 通过引用中的颜色指针判断引用是否变更
就会将新的引用替换掉老的引用

对象变更的几个点

  • 并发标记时新增的对象
将这样的对象用黑色标记 下一次gc过程再回收
  • 并发标记时老的对象状态变更
这部分对象在重新标记或最终标记的过程会修正
比如存活对象变成了垃圾对象就会讲gcroot引用链上剔除
  • 将存活对象复制到新的region区
CMS 并发清理 ,过程中的新增对象用黑色标记 下次gc回收
G1 筛选回收 该过程stw 直接将对象老的地址更新为新的
ZGC 并发重分配 将新-老映射关系记录在转发表 用户线程访问访问老的对象时会通过转发表路由到新的地址

并发重映射过程

该过程就是将gcroot上老的对象引用更新为新的对象引用

这个过程实际上并没有做处理 而是将这个过程放在了下一次gc并发标记中去了

这样就节省了一次遍历对象图的开销

一旦所有指针被修正了之后 原来记录新旧对象关系转发表就可以释放了

颜色指针(染色指针)

颜色指针不可以被压缩

32位可以做指针压缩 
总共64位 小于等于35位 即<=32G 可以做指针压缩 可以压缩到32位去存储
cpu寻址还是用的35位

真正使用的时候 还要解压缩变成35位才能够寻址到完整的32个g
cpu使用的是是35位 存到内存对象中压缩成32位了

jvm目前实现 最多35位之内的可以做指针压缩

zgc至少用42+4=46位 所以没有办法做指针压缩

读屏障

在并发重新分配阶段 将有效对象复制到另外一个空的region区中
原有的引用地址要更新 (惰性更新)
将从堆中拿老的对象值的时候

http://www.ppmy.cn/news/865246.html

相关文章

OpenJDK16 ZGC 源码分析

动手点关注 干货不迷路 &#x1f446; 概览 ZGC 在 JDK11 中作为实验性功能引入后&#xff0c;已经经过了 5 个版本的演进&#xff0c;目前较之前版本有了较大的变化。本文将分析 ZGC 的设计思想和原理。 ZGC 主要设计理念如下&#xff1a; ZGC 为了支持 TB 级内存&#xff0c;…

阿里巴巴优酷视频增强和超分辨率挑战赛-持续更新

目录 大赛概况 1.数据预处理 2.模型初选 3.训练 ->确定两个模型 4.训练,修改网络&#xff0c;继续优化 大赛概况 大赛地址&#xff1a;https://tianchi.aliyun.com/competition/entrance/231711/introduction?spm5176.12281949.1003.2.37422448y3C5Xj 视频增强和超分…

速看丨传智教育全链路+UI/UE设计学科V6.0硬核来袭!

梦&#xff0c;该如何去追&#xff1f; 都说城市安不下肉身&#xff0c;老家容不下灵魂&#xff0c;选择毕业后回老家偏安一隅&#xff0c;还是留在大城市努力拼搏&#xff0c;是每个年轻人一闭眼就要思考的问题。 每一份梦想都值得被尊重&#xff0c;每一份努力都值得被赞赏&a…

探秘ZGC

ZGC&#xff08;The Z Garbage Collector&#xff09;是JDK 11中推出的一款低延迟垃圾回收器&#xff0c;目前处于试验阶段&#xff0c;它的优势包括&#xff1a; 停顿时间不超过10ms&#xff0c;可以在KB~TB的工作范围下进行垃圾回收&#xff1b;停顿时间不会随着堆的大小&am…

什么是chatgpt?丨小智AI

什么是chatgpt&#xff1f; ChatGPT是一种大型语言模型&#xff0c;由OpenAI开发。它是建立在GPT-3.5架构上的&#xff0c;可以进行自然语言处理和生成&#xff0c;包括文本分析、问答、文本生成等多种任务。ChatGPT通过学习海量的语言数据&#xff0c;并使用深度神经网络进行…

ZGC学习笔记:ZGC简介和JDK17对ZGC的优化

00 前情提要 不行了&#xff0c;之前还没写几篇文章&#xff0c;本来想保持住那种非常认真非常严谨的风格&#xff0c;保持不住了~ 反正工作时候还不是遇到问题&#xff0c;先google&#xff0c;google不到再百度一下。解决不了就向同事卖萌啦~ 这图我实在找不到更高清的了&…

小智一分钟带你搭建个人网站

前言: 这是小编在学习网页的时候,使用ISS配置服务器,写的一些总结,希望对大家有所帮助! 简介: 首先介绍一下ISS,ISS是Internet Information Services的缩写,意为互联网信息服务,是微软公司提供的基于运行Microsoft Windows的互联网基本服务。ISS是一种Web(网页)服…

勒索病毒.[tsai.shen@mailfence.com].faust、.[support2022@cock.li].faust引起的数据被加密恢复

勒索病毒的危害 勒索病毒是最具破坏性和恐怖性的一种病毒。最近[tsai.shen@mailfence.com].faust勒索病毒、.[support2022@cock.li].faust勒索病毒引起了广泛的关注和担忧。 如果您的数据已被勒索软件加密,恢复数据的最可靠方法是使用备份。如果您有备份,可以将备份文件恢复…