首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >垃圾收集如何收集自引用对象?

垃圾收集如何收集自引用对象?
EN

Stack Overflow用户
提问于 2011-12-13 20:27:58
回答 2查看 1.1K关注 0票数 12

如果某个对象未被任何其他对象引用,则该对象将由.NET CLR垃圾回收器回收。

但是,如果objA引用objBobjB引用objCobjC引用回objA,垃圾收集器如何确定它们(作为一个整体)可以被收集?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-12-13 20:32:10

CLR使用一种称为标记和清除的技术。

作为该技术的一部分,每个对象都可以被认为是最初标记为要收集的对象。然后,CLR遍历每个可访问的对象,从全局变量(静态字段等)开始。作为根,并清除每个可遍历对象上的标记。然后,它将扫描剩余的标记对象。

请记住,这种“标记”是概念性的;实际上,对象最有可能被添加到集合组中。

在循环自引用对象的情况下,将不会从应用程序中找到对对象的引用,因此算法永远不会到达这些对象来“取消标记”它们。

票数 8
EN

Stack Overflow用户

发布于 2011-12-13 20:32:10

GC有一个所有已创建对象的列表。在garbarge过程中,它从全局根(如静态字段)开始,遍历每个引用的对象。所有未命中的对象列表中的每个对象都可以被销毁。

如果无法命中objA、objB或objC,则将收集所有这些对象

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8489241

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档