.net - 垃圾收集器 - 最终确定

标签 .net garbage-collection

来自 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/

相关文章:

android - 如何阻止垃圾收集器在android中被调用

c# - DataContractSerializer 和 Dictionary<string,object> 读取时失败

.net - 将 C#3 代码表示为 XML 中的抽象语法树

java - 有多少对象符合垃圾收集器的条件

garbage-collection - 垃圾收集器如何知道堆栈帧上的引用?

java - Java中循环语句的垃圾收集

java - Java 中一个对象与另一个对象的弱关联?

c# - 在这种情况下什么时候调用我的析构函数? (C#)

c# - 使用 MS Access 作为 .NET 应用程序后端

c# - Function 还是 async 可以细化吗?