垃圾收集器 - 完成

时间:2014-01-12 23:13:09

标签: .net garbage-collection

来自MSDN: “当一个对象无法访问时,垃圾收集器会将对象视为垃圾。然后,当垃圾收集器将对象的条目从最终化队列移动到可释放队列时,该对象不再被视为垃圾并且其内存不会被回收。这一点,垃圾收集器已经完成识别垃圾。一些被识别为垃圾的对象被重新分类为非垃圾。垃圾收集器压缩可回收内存,特殊运行时线程清空可释放队列,执行每个对象的Finalize方法。 需要两个GC来回收需要完成的对象使用的内存。

我的问题 - 由于需要两个GC回收需要完成的对象的内存,如果在第二次收集发生之前,需要完成的对象再次被强烈引用,垃圾收集器是否从f-reachable队列中删除该对象以便它不被垃圾收集?

1 个答案:

答案 0 :(得分:4)

  

垃圾收集器是否从f-reachable队列中删除了对象,以便不收集垃圾?

是。

在第二次运行中始终会从fRreachable中删除它,但是当有新的外部引用时,它将不会被收集。您需要使用GC.ReRegister()方法让它再次完成。

这整个模式称为复活,并且是very rarely called for