讨论一下.NET的垃圾回收
《C# Primer Plus》中有这么一段:
当GC在某时刻发现某个对象被废弃了而且没有析构函数,GC就会立即回收它(1)。相反,当发现废弃对象带有一个析构函数声明,GC就将它的引用与其他需要同样处理对象放入一个特殊的列表中,等待执行他们的析构函数语句。
当GC结束突发性废弃对象判断后,它就启动另一个进程,执行上述特殊列表中每一个对象的析构函数中的语句。(2)
最后,讲每个对象的引用(3)放在另一个即将回收对象列表中。不过,直到GC的下一次突发性动作,他们才会被回收。
(1)我觉得可能具体是指此次突发性废弃对象判断后紧接着的回收进程中得到回 收。
(2) 析构函数里可能包含有用户自己编写的资源回收语句(C++程序员尤其喜欢如此),那么还需要第二个突发性动作来做什么呢?
(3)这里的“对象的引用”指什么?是指还残留在内存中的对象实例吗?
(4)始终不明白析构函数和Finalize()是什么关系?GC是如何区别对待他们两个的?