当前位置:网站首页>新一代垃圾回收器—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背后的设计思路。
关注公众号 + 输入[面试题] + 免费领取面试资料(面试大纲+面试答案)!
边栏推荐
- DOM operation
- 腾讯T3手把手教你,真的太香了
- 手把手教你学会js的原型与原型链,猴子都能看懂的教程
- (3) Web security | penetration testing | basic knowledge of network security construction, IIS website construction, EXE backdoor generation tool quasar, basic use of
- Leetcode 30. 串联所有单词的子串
- logstash高速入口
- 腾讯Android面试必问,10年Android开发经验
- 蓝桥杯 微生物增殖 C语言
- Test Li hi
- js实现力扣71题简化路径
猜你喜欢
Transformer model (pytorch code explanation)
Chic Lang: attributeerror: partially initialized module 'CV2' has no attribute 'GAPI_ wip_ gst_ GStreamerPipe
Hudi vs Delta vs Iceberg
在解决了 2961 个用户反馈后,我做出了这样的改变...
Phoenix Architecture 3 - transaction processing
Mysql Information Schema 学习(一)--通用表
After solving 2961 user feedback, I made such a change
Interpretation of Dagan paper
思維導圖+源代碼+筆記+項目,字節跳動+京東+360+網易面試題整理
[translation] micro survey of cloud native observation ability. Prometheus leads the trend, but there are still obstacles to understanding the health of the system
随机推荐
10 schemes to ensure interface data security
Learning and Exploration - Seamless rotation map
Method keywords deprecated, externalprocname, final, forcegenerate
ZABBIX proxy server and ZABBIX SNMP monitoring
LeetCode_ Double pointer_ Medium_ 61. rotating linked list
Test Li hi
MySQL must know and learn
技术分享 | 抓包分析 TCP 协议
Example of applying fonts to flutter
After solving 2961 user feedback, I made such a change
精彩编码 【进制转换】
Low CPU load and high loadavg processing method
【翻译】数字内幕。KubeCon + CloudNativeCon在2022年欧洲的选择过程
Unbalance balance (dynamic programming, DP)
Information System Project Manager - Chapter VIII project quality management
Interpretation of Dagan paper
Interview assault 63: how to remove duplication in MySQL?
Reflection and illegalaccessexception exception during application
【云小课】EI第47课 MRS离线数据分析-通过Flink作业处理OBS数据
激进技术派 vs 项目保守派的微服务架构之争