谁打电话给谁?

时间:2014-01-17 06:32:17

标签: c# garbage-collection destructor finalize

我对msdn上这两个看似矛盾的陈述感到困惑。

1)当类包含析构函数时,将在Finalize队列中创建一个条目。调用析构函数时,将调用垃圾收集器来处理队列。

2)程序员无法控制何时调用析构函数,因为这是由垃圾收集器决定的。垃圾收集器检查应用程序不再使用的对象。如果它认为某个对象有资格进行销毁,它会调用析构函数(如果有的话)并回收用于存储对象的内存。

在第一个声明中我理解Destructor调用--->垃圾收集器 而从第二个声明我知道垃圾收集器调用--->析

...

更新:此link

1 个答案:

答案 0 :(得分:4)

首先,垃圾收集器确定对象符合收集条件。

如果对象需要完成,则将其置于终结队列中;它现在再次存在,因为队列是根。

然后终结器线程运行,将对象标记为不再需要完成,并运行终结器。

如果在终结器结束时对象仍然死亡,那么当GC稍后再次运行时,它会发现有一个不需要完成的死对象,并将其清理干净。