当前位置:网站首页>新一代垃圾回收器—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背后的设计思路。
关注公众号 + 输入[面试题] + 免费领取面试资料(面试大纲+面试答案)!
边栏推荐
- VMware virtual machine cannot open the kernel device "\.\global\vmx86"
- 冒烟测试怎么做
- 思维导图+源代码+笔记+项目,字节跳动+京东+360+网易面试题整理
- 【云小课】EI第47课 MRS离线数据分析-通过Flink作业处理OBS数据
- 350. 两个数组的交集 II
- 腾讯Android面试必问,10年Android开发经验
- 利用 clip-path 绘制不规则的图形
- Live broadcast today | the 2022 Hongji ecological partnership conference of "Renji collaboration has come" is ready to go
- Understand yolov1 Part II non maximum suppression (NMS) in prediction stage
- Learning and Exploration - Seamless rotation map
猜你喜欢

Analysis of rainwater connection

Hudi vs Delta vs Iceberg

Interview assault 63: how to remove duplication in MySQL?

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

Transformer model (pytorch code explanation)

学习打卡web

How to access localhost:8000 by mobile phone

如何自定义动漫头像?这6个免费精品在线卡通头像生成器,看一眼就怦然心动!

Leetcode 30. 串联所有单词的子串

Zero foundation entry polardb-x: build a highly available system and link the big data screen
随机推荐
How to customize animation avatars? These six free online cartoon avatar generators are exciting at a glance!
beegfs高可用模式探讨
Blue Bridge Cup microbial proliferation C language
[calculating emotion and thought] floor sweeper, typist, information panic and Oppenheimer
HDU 1026 Ignatius and the Princess I 迷宫范围内的搜索剪枝问题
AddressSanitizer 技术初体验
Analysis of rainwater connection
Li Kou 101: symmetric binary tree
10 schemes to ensure interface data security
MySQL information Schema Learning (i) - - General table
如何自定义动漫头像?这6个免费精品在线卡通头像生成器,看一眼就怦然心动!
How to access localhost:8000 by mobile phone
Example of applying fonts to flutter
Lick the dog until the last one has nothing (simple DP)
MySql必知必会学习
DOM operation
Learn to explore - use pseudo elements to clear the high collapse caused by floating elements
Social recruitment interview experience, 2022 latest Android high-frequency selected interview questions sharing
In simple terms, interview surprise Edition
[infrastructure] deployment and configuration of Flink / Flink CDC (MySQL / es)