加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 垃圾收集如何收集自引用对象?

发布时间:2020-12-15 17:46:31 所属栏目:百科 来源:网络整理
导读:如果某个对象未被任何其他对象引用,则它将被.NET CLR垃圾回收器收集. 然而,如果objA引用objB,objB引用objC和objC引用回objA,垃圾收集器如何识别出它们(作为一个整体)可以被收集? 解决方法 CLR使用一种称为标记扫描的技术. 作为这种技术的一部分,每个对象都
如果某个对象未被任何其他对象引用,则它将被.NET CLR垃圾回收器收集.

然而,如果objA引用objB,objB引用objC和objC引用回objA,垃圾收集器如何识别出它们(作为一个整体)可以被收集?

解决方法

CLR使用一种称为标记扫描的技术.

作为这种技术的一部分,每个对象都可以被认为是最初被标记为收集的.然后,CLR通过每个可访问对象,从全局变量(静态字段等)开始,作为根,并清除每个步行对象上的标记.然后扫描剩余的标记对象.

请记住,这个“标记”是概念性的;实际上,这些对象很可能被添加到集合集中.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读