垃圾收集器如何确定对象是否是垃圾?

时间:2010-03-22 09:29:30

标签: .net garbage-collection

垃圾收集器如何确定对象是否是垃圾?它是否引用堆栈来检查对堆中分配的空间的引用?

3 个答案:

答案 0 :(得分:4)

它使用mark and sweep algorithm。简化版本:首先考虑所有有资格收集的对象。然后它扫描根到对象。然后将任何有根对象标记为正在使用中。之后,所有剩余的对象都被认为是垃圾。 Jeffrey Richter在CLR via C#中详细描述了细节。

答案 1 :(得分:3)

A. Hunter的

This文章解释说这一切都很好。

简而言之,GC遵循引用来查找所有无法访问的对象。如果对象或其任何超类包含具有另一个对象的字段,则该对象引用另一个对象。

为实现此目的,GC会跟踪四种类型的根对象,称为 GC根。最常见的根类型是在堆栈上创建的所有变量(正如您猜测的那样)。其他根类型是静态,互操作相关和具有终结器方法的对象。

所以是的,在大多数情况下,GC指的是堆栈。

答案 2 :(得分:0)