这篇文章指出:
如果一个对象有一个终结器(finalizer)方法,当垃圾回收器决定它不再“存活”时,它不会立即被移除。相反,它会成为一种特殊类型的根,直到.NET调用了终结器方法。这意味着这些对象通常需要多次垃圾回收才能从内存中删除,因为它们将在第一次被发现未使用时幸存下来。
那么我的问题是,为什么GC在发现对象不能被引用时不立即调用终结器并立刻收集该对象?为什么需要多次垃圾回收?
如果一个对象有一个终结器(finalizer)方法,当垃圾回收器决定它不再“存活”时,它不会立即被移除。相反,它会成为一种特殊类型的根,直到.NET调用了终结器方法。这意味着这些对象通常需要多次垃圾回收才能从内存中删除,因为它们将在第一次被发现未使用时幸存下来。
那么我的问题是,为什么GC在发现对象不能被引用时不立即调用终结器并立刻收集该对象?为什么需要多次垃圾回收?