当前位置:网站首页>新一代垃圾回收器—ZGC
新一代垃圾回收器—ZGC
2022-07-06 11:54:00 【老王随聊】
目录
1、什么是ZGC
ZGC(The Z Garbage Collector)是JDK 11中推出的一款追求极致低延迟的实验性质的垃圾收集器。
ZGC是最近由Oracle为OpenJDK开源的新垃圾收集器。它主要由Per Liden编写。ZGC类似于Shenandoah或Azul的C4,专注于减少暂停时间的同时仍然压缩堆。
2、ZGC设计目的
ZGC的核心是一个并发垃圾回收器,其设计的目标是:
1) 停顿时间不超过10ms;
2) 停顿时间不会随着堆的大小,或者活跃对象的大小而增加;
3) 支持堆范围为8MB~4TB级别(未来支持16TB)。
总之, ZGC的目的就是在减少暂停时间的同时,仍然能压缩堆。
3、ZGC现状
基于最新的JDK15来看,“停顿时间不超过10ms”和“支持16TB的堆”这两个目标已经实现,并且官方明确指出JDK15中的ZGC不再是实验性质的垃圾收集器,而且建议投入生产了。
4、ZGC的核心技术
4.1 多重映射
先来看一个很有意思的例子。
你在你爸爸妈妈眼中是儿子,在你女朋友眼中是男朋友。在全世界人面前就是最帅的人。你还有一个名字,但名字也只是你的一个代号,并不是你本人。假如你的名字是全世界唯一的,通过“你的名字”、“你爸爸的儿子”、“你女朋友的男朋友”,“世界上最帅的人”最后定位到的都是你本人。
现在我们再来看看ZGC的内存管理。
ZGC中管理物理内存的基本单位是segment。segment默认与small page size一样,都是2MB。引入segment是为了避免频繁的申请和释放内存的系统调用,一次申请2MB,当segment空闲时,将加入空闲列表,等待之后重复使用。
ZGC为了能高效、灵活地管理内存,实现了两级内存管理:虚拟内存和物理内存,并且实现了物理内存和虚拟内存的映射关系。这和操作系统中虚拟地址和物理地址设计思路基本一致。
当应用程序创建对象时,首先在堆空间申请一个虚拟地址,ZGC同时会为该对象在Marked0、Marked1和Remapped三个视图空间分别申请一个虚拟地址,且这三个虚拟地址对应同一个物理地址。
在ZGC中这三个空间在同一时间点有且仅有一个空间有效。
为什么这么设计呢?
这就是ZGC的高明之处,利用虚拟空间换时间。
这三个空间的切换是由垃圾回收的不同阶段触发的,通过限定三个空间在同一时间点有且仅有一个空间有效高效的完成GC过程的并发操作,这个和ZGC并发处理算法有关系。ZGC并发处理算法利用全局空间视图的切换和对象地址视图的切换,结合SATB算法实现了高效的并发。
4.2 染色指针
我们都知道,之前的垃圾收集器都是把GC信息(标记信息、GC分代年龄..)存在对象头的Mark Word里。
而ZGC是这样做的:
如果某个对象是垃圾对象。就在这对象的信息里面标注这个对象是个垃圾。以后不管这个对象在哪儿使用,都知道他是个垃圾对象。
ZGC将对象信息存储在指针中,这种技术叫做——染色指针(Colored Pointer)。
在64位的机器中,对象指针是64位的。
ZGC使用64位地址空间的第0~43位存储对象地址,2^44 = 16TB,所以ZGC最大支持16TB的堆。
而第44~47位作为颜色标志位,Marked0、Marked1和Remapped代表三个视图标志位,Finalizable表示这个对象只能通过finalizer才能访问。
第48~63位固定为0没有利用。
4.3 读屏障
读屏障是JVM向应用代码插入一小段代码的技术。当应用线程从堆中读取对象引用时,就会执行这段代码。不要把这个读屏障和Java内存模型里面的读屏障搞混了,两者根本不是同一个东西,ZGC中的读屏障更像是一种AOP技术,在字节码层面或者编译代码层面给读操作增加一个额外的处理。
ZGC作为一款优秀垃圾收集器了,其借鉴了Pauseless GC,但在G1都没有普及的今天,谈论ZGC似乎为时过早。但也许我们探讨的不是ZGC,而是ZGC背后的设计思路。
关注公众号 + 输入[面试题] + 免费领取面试资料(面试大纲+面试答案)!
边栏推荐
- 面试突击63:MySQL 中如何去重?
- HDU 1026 search pruning problem within the labyrinth of Ignatius and the prince I
- 腾讯T4架构师,android面试基础
- DOM operation
- 颜色(color)转换为三刺激值(r/g/b)(干股)
- js实现力扣71题简化路径
- DaGAN论文解读
- 语音识别(ASR)论文优选:全球最大的中英混合开源数据TALCS: An Open-Source Mandarin-English Code-Switching Corpus and a Speech
- Spark foundation -scala
- The "white paper on the panorama of the digital economy" has been released with great emphasis on the digitalization of insurance
猜你喜欢
Swiftui game source code Encyclopedia of Snake game based on geometryreader and preference
MySQL information schema learning (II) -- InnoDB table
Learn to explore - use pseudo elements to clear the high collapse caused by floating elements
Using clip path to draw irregular graphics
【基础架构】Flink/Flink-CDC的部署和配置(MySQL / ES)
Tencent Android interview must ask, 10 years of Android development experience
腾讯Android面试必问,10年Android开发经验
LeetCode_ Double pointer_ Medium_ 61. rotating linked list
spark基础-scala
【翻译】Linkerd在欧洲和北美的采用率超过了Istio,2021年增长118%。
随机推荐
Spark foundation -scala
学习探索-无缝轮播图
[calculating emotion and thought] floor sweeper, typist, information panic and Oppenheimer
腾讯字节阿里小米京东大厂Offer拿到手软,老师讲的真棒
Phoenix Architecture 3 - transaction processing
POJ3617 Best Cow Line 馋
冒烟测试怎么做
In simple terms, interview surprise Edition
思维导图+源代码+笔记+项目,字节跳动+京东+360+网易面试题整理
理解 YOLOV1 第二篇 预测阶段 非极大值抑制(NMS)
Live broadcast today | the 2022 Hongji ecological partnership conference of "Renji collaboration has come" is ready to go
Alibaba数据源Druid可视化监控配置
Simple application of VBA script in Excel
Learn to explore - use pseudo elements to clear the high collapse caused by floating elements
MySQL information Schema Learning (i) - - General table
[玩转Linux] [Docker] MySQL安装和配置
Alibaba data source Druid visual monitoring configuration
深入分析,Android面试真题解析火爆全网
句号压缩过滤器
Zero foundation entry polardb-x: build a highly available system and link the big data screen