我对msdn上这两个看似矛盾的陈述感到困惑。
1)当类包含析构函数时,将在Finalize队列中创建一个条目。调用析构函数时,将调用垃圾收集器来处理队列。
2)程序员无法控制何时调用析构函数,因为这是由垃圾收集器决定的。垃圾收集器检查应用程序不再使用的对象。如果它认为某个对象有资格进行销毁,它会调用析构函数(如果有的话)并回收用于存储对象的内存。
在第一个声明中我理解Destructor调用--->垃圾收集器 而从第二个声明我知道垃圾收集器调用--->析
...
更新:此link
答案 0 :(得分:4)
首先,垃圾收集器确定对象符合收集条件。
如果对象需要完成,则将其置于终结队列中;它现在再次存在,因为队列是根。
然后终结器线程运行,将对象标记为不再需要完成,并运行终结器。
如果在终结器结束时对象仍然死亡,那么当GC稍后再次运行时,它会发现有一个不需要完成的死对象,并将其清理干净。