golang gc 所使用的三色标记法/删除写屏障/插入写屏障/混合写屏障
混合写屏障
具体操作
- gc 开始, 将栈上的对象全部扫描并标记可达节点为黑色 (之后不再进行第二次重复扫描, 无需 STW)
- gc 期间, 任何在栈上创建的新对象, 均标记为黑色
- 被添加的对象如果为白色, 则将其标记为灰色(无论在堆上还是在栈上)
- 被删除的对象如果为白色, 则将其标记为灰色(无论在堆上还是在栈上)
满足: 变形的弱三色不变式, 结合了插入/删除写屏障二者的优点
golang gc 所使用的三色标记法/删除写屏障/插入写屏障/混合写屏障
具体操作
满足: 变形的弱三色不变式, 结合了插入/删除写屏障二者的优点