0

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

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

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

在第一个语句中,我了解析构函数调用 ---> 垃圾收集器,而从第二个语句中我了解垃圾收集器调用 ---> 析构函数

??

更新:此链接

4

1 回答 1

4

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

如果对象需要终结,则将其放置在终结队列中;它现在又活了,因为队列是根。

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

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

于 2014-01-17T06:36:48.067 回答