在MSDN中:“当一个对象不可到达时,垃圾回收器会考虑对象垃圾。然后,当垃圾收集器将一个对象的条目从终结队列移动到可自由队列时,该对象不再被视为垃圾,其内存也不会被回收。此时,垃圾收集器已经完成了对垃圾的标识。一些被标识为垃圾的对象已被重新归类为非垃圾。垃圾收集器压缩可重声明内存,特殊运行时线程清空可自由队列,执行每个对象的finished方法。需要两个GC才能收回需要终结的对象所使用的内存。
我的问题-,因为两个GC需要为需要完成的对象回收内存,如果在第二次收集之前,需要终结的对象再次被强烈引用,垃圾收集器是否从f可访问队列中删除对象,从而使其不被垃圾收集?
发布于 2014-01-12 23:14:03
垃圾收集器是否将对象从f可访问队列中移除,从而使其不被垃圾收集?
是。
在第二次运行时,它将始终从fRreachable中删除,但是当有一个新的外部引用时,它将不会被收集。您需要使用GC.ReRegister()方法来重新完成它。
这整个模式被称为resurrection,并且是very rarely called for。
https://stackoverflow.com/questions/21081537
复制相似问题