学习GC三色标记算法时,发现一个很关键的问题:既然是三色,那么在初始阶段,是否存在一个操作:遍历整个堆空间,把所有对象地址放入一个“白色集合”的操作。也就是 到底有没有这个“白色节点集合“。还是说 最后根本只能通过“排除黑色”去清理白色节点。
只要这个问题能解决,其实很多人对三色标记算法的模糊认识都解开了。因为有白色集合,也就意味着 这个看似很复杂的问题从一开始就限定了范围。复杂度一下子就降低了。然后还会让人意识到:其实对象不光只有三色,还有“无色”的新增对象,根本不在处理范围内。
我从多个角度分析,这个白色集合是存在的,只是没找到一篇文章或证据能给我一个准确的答案(大家似乎都不约而同的避开了这个关键问题)。