对于msdn上这两个看似矛盾的陈述,我感到很困惑。
1)当类包含析构函数时,将在Finalize队列中创建一个条目。当调用析构函数时,将调用垃圾回收器来处理队列。
2)程序员无法控制何时调用析构函数,因为这是由垃圾收集器确定的。垃圾收集器检查应用程序不再使用的对象。如果它认为一个对象符合销毁条件,它将调用析构函数(如果有的话)并回收用于存储该对象的内存。
在第一条语句中,我理解析构函数调用->垃圾回收器,而从第二条语句中,我理解垃圾回收器调用-->析构函数。
??
更新:此链接
发布于 2014-01-17 06:36:48
首先,垃圾收集器确定对象有资格进行回收。
如果对象需要终结,那么它就被放置在终结队列中;由于队列是根,所以它现在再次处于活动状态。
然后终结器线程运行,将对象标记为不再需要终结,并运行终结器。
如果在终结器的末尾,对象仍然是死的,那么当GC稍后再次运行时,它会发现有一个不需要终结的死对象,并清理它。
https://stackoverflow.com/questions/21179310
复制相似问题