并发垃圾回收需要“标记阶段”。 “标记阶段”的作用是在“并发标记阶段”期间标记修改的对象。但我认为,如果我们只在“并发标记阶段”中标记新创建的对象,则没有必要执行“标记阶段”。
“标记阶段”是由于修改的对象而需要的。修改可以是两种类型。一种是新对象的创建,另一种是指向另一个对象的已修改指针。如果我们标记新创建的对象,则可以轻松解决新对象问题。实际上,指向另一个对象的修改指针并不是问题。因为“死亡对象无法复活”。死亡对象意味着没有人能指向该对象。它们如何复活?因此,修改的指针应指向已标记的对象。这意味着没有必要执行“标记”。
有人可能会说:“在创建时标记新对象太昂贵了。因此,在‘并发标记阶段’中不能标记它们,这就是需要‘标记阶段’的原因”。这似乎是合理的。但这可能会引起另一个问题。如何在不遍历根对象的情况下进行“标记阶段”?如果“标记阶段”应遍历从根对象开始的所有对象,则“并发标记阶段”完成的工作将是无用的。或者,如果“标记阶段”仅遍历修改的对象,则应将哪个对象已修改的信息保存在某个地方。我认为这可能比仅进行标记要昂贵得多。
我错了吗?这应该是错误的。但我不知道哪一点是错误的。
“标记阶段”是由于修改的对象而需要的。修改可以是两种类型。一种是新对象的创建,另一种是指向另一个对象的已修改指针。如果我们标记新创建的对象,则可以轻松解决新对象问题。实际上,指向另一个对象的修改指针并不是问题。因为“死亡对象无法复活”。死亡对象意味着没有人能指向该对象。它们如何复活?因此,修改的指针应指向已标记的对象。这意味着没有必要执行“标记”。
有人可能会说:“在创建时标记新对象太昂贵了。因此,在‘并发标记阶段’中不能标记它们,这就是需要‘标记阶段’的原因”。这似乎是合理的。但这可能会引起另一个问题。如何在不遍历根对象的情况下进行“标记阶段”?如果“标记阶段”应遍历从根对象开始的所有对象,则“并发标记阶段”完成的工作将是无用的。或者,如果“标记阶段”仅遍历修改的对象,则应将哪个对象已修改的信息保存在某个地方。我认为这可能比仅进行标记要昂贵得多。
我错了吗?这应该是错误的。但我不知道哪一点是错误的。