.Net实现垃圾收集,对象行为未知,无法理解其行为

时间:2011-12-19 11:25:59

标签: c# asp.net .net visual-studio

我正在对.Net库进行一些研究工作,并在尝试编写c#中的对象并检查它们时对此行为感到困惑。 我只想知道,当任何代码无法访问它们时,对象是否有资格进行垃圾回收?在运行GC函数之前,我们的对象是否可以引用其他内存,是否可以将它们移动到内存中?例如,如果我们为它们实现终结器,那么它必须在过程中的某个时刻调用它的终结器吗? 我想清除我的概念,我试图用一些c#代码来做,但我不清楚。

1 个答案:

答案 0 :(得分:3)

运行时维护可到达对象的图形。当GC运行并确定一个对象是垃圾时,它会看到该对象有一个Finalize方法,并将调用该方法,重新启动内存。所有具有Finalize方法的对象都将从终结队列中删除并放入F-Reachable队列中。特殊的运行时线程专用于处理此队列并调用每个对象的finalize方法。

我建议你阅读MSDN上Jeffery Richter的以下文章。这是一篇3篇文章,可以清除你所有的疑惑。

http://msdn.microsoft.com/en-us/magazine/bb985010.aspx