来自 MSDN: “当一个对象不可访问时,垃圾收集器会认为该对象是垃圾。然后,当垃圾收集器将对象的条目从终结队列移动到易碎队列时,该对象不再被视为垃圾,并且其内存也不会被回收。至此,垃圾收集器已经完成垃圾识别,一些被识别为垃圾的对象已被重新分类为非垃圾,垃圾收集器压缩可回收内存,特殊运行时线程清空易碎队列,执行每个对象的 Finalize 方法。 需要两次 GC 来回收需要终结的对象所使用的内存。
我的问题 - 由于需要两次GC来回收需要终结的对象的内存,如果在第二次收集之前,需要终结的对象再次被强引用,垃圾收集器是否会将该对象从f-reachable队列中删除,使其不被垃圾收集?
最佳答案
does the garbage collector remove the object from the f-reachable queue so that its not garbage collected?
是的。
它总是会在第二次运行时从 fRreachable
中删除,但是当有新的外部引用时,它将不会被收集。您需要使用 GC.ReRegister() 方法再次完成它。
这整个模式称为复活,是 very rarely called for 。
关于.net - 垃圾收集器 - 最终确定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21081537/