8.5.5. ZGC垃圾回收器
1)ZGC的介绍
ZGC垃圾回收器全称为Z Garbage Collector,是一个可伸缩的、低延迟、并发的垃圾收集器,主要为了满足如下目标进行设计:
1.停顿时间不会超过10ms
2.停顿时间不会随着堆的增大而增大(不管多大的堆都能保持在10ms以下)
3.可支持几百M,甚至几T的堆大小(最大支持4T)
2)ZGC的停顿时间
停顿时间在10ms以下,10ms其实是一个很保守的数据,在SPECjbb 2015基准测试,128G的大堆下最大停顿时间才1.68ms,远低于10ms,和G1算法相比,也感觉像是在虐菜。
3)ZGC停顿时间短的原因
原因1,基于单位内存区域Region-based的内存存储方式。ZGC中没有新生代和老年代的概念,只有一块一块的内存区域page,以page单位进行对象的分配和回收。
原因2,使用颜色指针进行标记对象的垃圾状态。ZGC使用指向对象的指针来标记对象的状态,即在对象的引用(指向对象的指针)上标注对象的信息(不是对象头),当这个被指向的内存发生变化的时候(内存在Compact整理被移动时),颜色也就会发生变化。
对象指针共有64位,其中低42位为对象的地址,高18位没有使用,42-45位标记指向内存的存储状态,这4位分别为Finalizable、Remapped、Marked1、Marked0。
Marked0/marked1判断