ZGC实现亚毫秒级停顿的核心在于着色指针与读屏障协同:前者将GC状态编码于指针高位实现纳秒级状态判断,后者在每次引用读取时按需修正指针,使标记、迁移、引用更新全部并发完成,仅剩根扫描等极短STW。
ZGC 实现亚毫秒级停顿的核心,就藏在“着色指针”和“读屏障”这两个技术里。它们不靠加快单步操作,而是把原本必须暂停应用线程才能做的事,变成应用线程自己顺手完成的小动作。
传统 GC 把对象是否存活、是否已移动等状态存在对象头中,每次判断都要访问内存。ZGC 反过来,直接利用 64 位指针的高位(比如高 4 位)编码状态,例如:
这样,检查一个对象的状态只需一次位运算,纳秒级完成;而且状态随指针一起流动,为读屏障提供即时依据。
当代码执行 Object obj = field; 这类操作时,JVM 自动插入轻量读屏障。它会检查指针颜色:
整个过程平均耗时不到 100 纳秒,对业务代码完全透明。
着色指针提供快速状态识别能力,读屏障提供按需响应能力,二者协同绕开传统 GC 的两大停顿根源:
最终 ZGC 剩下的 STW 阶段仅涉及根集合扫描和少量引用处理,时间只与线程栈、静态变量等根数量相关,和堆大小无关。