STW 和三色标记法
文章目录
golang 三色标记法
三色标记法为什么要 STW
强三色不变性
- 强制性 不允许黑色引用白色对象 【读写屏障,runtime复制判断】
弱三色不变性
- 黑色可以引用白色, 白色对象存在其他灰色对象的应用, 或者其他可以达到它的链路上游存在 灰色对象。
满足强弱之一,就可以保证对象不丢失
插入写屏障
额外的判断机制
- hook
- 回调
- handler
3 删除写屏障
删除屏障技术,又称基于起始快照的屏障。其思想是:
当白色或灰色的对象的引用被删除时,将白色对象变为灰色。
2 插入写屏障
在对象 A 引用对象 C 的时候,如果对象 C 是白色,就将对象 C 标记为灰色,其他情况则保持不变。
插入写屏弹是一种相对保守的屏障技术,它会将有存活可能的对象都标记为灰色以满足强三色不变式。
在上图所示的垃圾回收过程中,实际上不再存活的的对象 BB 也保留到了最后,没有被回收。如果在第二步时再指 AA 到 CC 的指针指向 BB ,虽然 CC 没有被任何对象引用,但其依然是灰色,不会被回收,只有在下次 GC 时才会被回收。
文章作者 LYR
上次更新 2021-08-17