golang gc 所使用的三色标记法/删除写屏障/插入写屏障/混合写屏障

混合写屏障

具体操作

  1. gc 开始, 将栈上的对象全部扫描并标记可达节点为黑色 (之后不再进行第二次重复扫描, 无需 STW)
  2. gc 期间, 任何在栈上创建的新对象, 均标记为黑色
  3. 被添加的对象如果为白色, 则将其标记为灰色(无论在堆上还是在栈上)
  4. 被删除的对象如果为白色, 则将其标记为灰色(无论在堆上还是在栈上)

满足: 变形的弱三色不变式, 结合了插入/删除写屏障二者的优点