本系列均是周志明老师《深入理解Java虚拟机》第三版的学习笔记。
一、ZGC概述
ZGC和Shenandoah的目标是高度相似的,都希望在尽可能对吞吐量影响不太大的前提下,实现在任意堆内存大小下都可以把垃圾收集的停顿时间限制在十毫秒以内的低延迟。
ZGC收集器是一款基于Region内存布局的,(暂时)不设分代的,使用了读屏障、染色指针和内存多重映射等技术来实现可并发的标记-整理算法的,以低延迟为首要目标的一款垃圾收集器。
二、ZGC的区域Region
ZGC的 Region可以具有大、中、小三类容量:
-
小型Region(Small Region):容量固定为2MB,用于放置小于256KB的小对象。
-
中型Region(Medium Region):容量固定为32MB,用于放置大于等于256KB但小于4MB的对 象。
-
大型Region(Large Region):容量不固定,可以动态变化,但必须为2MB的整数倍,用于放置 4MB或以上的大对象。每个大型Region中只会存放一个大对象,这也预示着虽然名字叫作“大型 Region”,但它的实际容量完全有可能小于中型Region,最小容量可低至4MB。大型Region在ZGC的实现中是不会被重分配(重分配是ZGC的一种处理动作,用于复制对象的收集器阶段,因为复制一个大对象的代价非常高昂。
三、染色指针技术
ZGC收集器有一个标志性的设计是它采用的染色指针技术