当前位置:网站首页>新一代垃圾回收器—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背后的设计思路。
关注公众号 + 输入[面试题] + 免费领取面试资料(面试大纲+面试答案)!
边栏推荐
- Learning and Exploration - function anti shake
- Pay attention to the partners on the recruitment website of fishing! The monitoring system may have set you as "high risk of leaving"
- [translation] supply chain security project in toto moved to CNCF incubator
- Microservice architecture debate between radical technologists vs Project conservatives
- Example of shutter text component
- 范式的数据库具体解释
- spark基础-scala
- 350. 两个数组的交集 II
- [translation] Digital insider. Selection process of kubecon + cloudnativecon in Europe in 2022
- 利用 clip-path 绘制不规则的图形
猜你喜欢

Interview assault 63: how to remove duplication in MySQL?

LeetCode_双指针_中等_61. 旋转链表

Analysis of rainwater connection

【计算情与思】扫地僧、打字员、信息恐慌与奥本海默

如何自定义动漫头像?这6个免费精品在线卡通头像生成器,看一眼就怦然心动!
In depth analysis, Android interview real problem analysis is popular all over the network

Configuration and simple usage of the EXE backdoor generation tool quasar

Understand yolov1 Part II non maximum suppression (NMS) in prediction stage

【翻译】云原生观察能力微调查。普罗米修斯引领潮流,但要了解系统的健康状况仍有障碍...

It's enough to read this article to analyze the principle in depth
随机推荐
HDU 1026 search pruning problem within the labyrinth of Ignatius and the prince I
深度剖析原理,看完这一篇就够了
Mysql Information Schema 学习(二)--Innodb表
【计算情与思】扫地僧、打字员、信息恐慌与奥本海默
POJ3617 Best Cow Line 馋
How to customize animation avatars? These six free online cartoon avatar generators are exciting at a glance!
理解 YOLOV1 第二篇 预测阶段 非极大值抑制(NMS)
[infrastructure] deployment and configuration of Flink / Flink CDC (MySQL / es)
logstash高速入口
Yyds dry goods inventory leetcode question set 751 - 760
Hudi vs Delta vs Iceberg
Zero foundation entry polardb-x: build a highly available system and link the big data screen
【翻译】供应链安全项目in-toto移至CNCF孵化器
[translation] Digital insider. Selection process of kubecon + cloudnativecon in Europe in 2022
Microservice architecture debate between radical technologists vs Project conservatives
POJ1149 PIGS 【最大流量】
Interview assault 63: how to remove duplication in MySQL?
Carte de réflexion + code source + notes + projet, saut d'octets + jd + 360 + tri des questions d'entrevue Netease
Tencent Android interview must ask, 10 years of Android development experience
【翻译】数字内幕。KubeCon + CloudNativeCon在2022年欧洲的选择过程