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

c# – 为什么垃圾收集器无法确定引用彼此的对象何时是孤立的

发布时间:2020-12-15 18:32:05 所属栏目:百科 来源:网络整理
导读:据我所知,在像 Java或C#这样的托管语言中,有一种称为垃圾收集器的东西,每隔一段时间检查一次是否有任何不再引用的对象实例,因此是完全孤立的,然后清除掉记忆但是,如果程序中的任何变量都没有引用两个对象,而是相互引用(如事件订阅),则垃圾回收器将看到此引用
据我所知,在像 Java或C#这样的托管语言中,有一种称为垃圾收集器的东西,每隔一段时间检查一次是否有任何不再引用的对象实例,因此是完全孤立的,然后清除掉记忆但是,如果程序中的任何变量都没有引用两个对象,而是相互引用(如事件订阅),则垃圾回收器将看到此引用而不清除内存中的对象.

为什么是这样?为什么垃圾收集器不能确定任何对象都不能被正在运行的程序的任何活动部分引用并处理它们.

解决方法

你的推定是不正确的.如果GC“看到”(见下文)2个或更多对象的循环引用(在“标记”阶段期间)但未被任何其他对象或永久GC句柄(强引用)引用,则将收集这些对象(在此期间) ‘清扫’阶段).

可以在this MSDN article和this blog post中找到对CLR垃圾收集器的深入了解.

注意:实际上,GC在标记阶段甚至没有“看到”这些类型的对象,因为它们无法访问,因此在扫描期间被收集.

(编辑:李大同)

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

    推荐文章
      热点阅读