cms三色标记漏标的时候为什么需要同时满足灰色断开白色,然后白色连接黑色?

漏标只有同时满足以下两个条件时才会发生:
条件一:灰色对象 断开了 白色对象的引用;即灰色对象 原来成员变量的引用 发生了变化。
条件二:黑色对象 重新引用了 该白色对象;即黑色对象 成员变量增加了 新的引用。

假设GC线程已经遍历到E(变为灰色了),用户线程直接将一个没有被任何人引用的H(白色)连接到D(黑色)上,不是一样可以产生漏标的效果么?为什么还需要条件一1?

阅读 1.2k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进