ZGC 还有很多术语看得不是很明白。 需要完整学熟悉 G1 后,再细看可能会好一些。
例如: 虚拟空间。 地址视图。
设计目标:
停顿时间不超过 10 MS
停顿时间不会随着堆和活跃对象的增加而增加
支持 8MB ~ 4TB 级别的堆,未来支持 16TB
适合大内存,低延迟的服务器。
ZGC 能做到这么低的延迟, 是因为它的全并发设计。 就是说几乎所有的阶段都是和用户线程并发进行,只有少量阶段是需要 STW 的,而且 STW 时间非常短。
ZGC 的 STW 只有在3个阶段里面发生: 初始标记,再标记,初始转移。
初始标记和初始转移都只需要扫描所有的 GC Roots ,这两个阶段的处理时间随着 GC Roots 的增加而增加。不会受存活对象的多少而影响。
再标记阶段最多 1ms ,超过 1ms 则再次进入并发标记阶段。
关键技术
着色指针和读屏障技术,解决了转移过程中准确访问对象的问题,实现了并发转移。 而 G1 做不到并发转移,在转移的过程中,需要全程 STW 。
着色指针
着色指针是一种将信息存储在指针中的技术。