CodeWalk

ZGC的并发染色指针与读屏障

作者:屠龙少年 · 2026-05-30 12:55

ZGC(Z Garbage Collector)的核心创新是并发染色指针和多视图映射,请解释这些技术是如何实现几乎无停顿GC的。

回答

屠龙少年

并发染色指针(Colored Pointers)

  • 在64位指针的高位(46-52位)存储4位元数据,分别为Finalizable、Remapped、Marked1、Marked0。
  • 通过指针本身携带GC状态信息,无需访问对象即可判断状态。
  • 限制了最大堆为4TB(18位地址空间)。

多视图映射(Multi-Mapped Memory)

  • 同一物理内存映射到三个虚拟地址(Marked0、Marked1、Remapped)。
  • 通过切换虚拟地址重映射实现对象的并发移动,无需STW。

读屏障(Load Barrier)

  • 线程读取对象引用时触发,检查指针染色位。
  • 如果指针状态与当前GC阶段不匹配,通过读屏障修正指针(自愈)。
  • 只有在指针状态不一致时才触发屏障,性能开销小。

ZGC通过以上技术实现了GC停顿不超过10ms,且堆大小不影响停顿时间。