垃圾收集器如何确定对象是否是垃圾?它是否引用堆栈来检查对堆中分配的空间的引用?
答案 0 :(得分:4)
它使用mark and sweep algorithm。简化版本:首先考虑所有有资格收集的对象。然后它扫描根到对象。然后将任何有根对象标记为正在使用中。之后,所有剩余的对象都被认为是垃圾。 Jeffrey Richter在CLR via C#中详细描述了细节。
答案 1 :(得分:3)
This文章解释说这一切都很好。
简而言之,GC遵循引用来查找所有无法访问的对象。如果对象或其任何超类包含具有另一个对象的字段,则该对象引用另一个对象。
为实现此目的,GC会跟踪四种类型的根对象,称为 GC根。最常见的根类型是在堆栈上创建的所有变量(正如您猜测的那样)。其他根类型是静态,互操作相关和具有终结器方法的对象。
所以是的,在大多数情况下,GC指的是堆栈。
答案 2 :(得分:0)