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

前端之家收集整理的这篇文章主要介绍了c# – 垃圾收集如何收集自引用对象?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
如果某个对象未被任何其他对象引用,则它将被.NET CLR垃圾回收器收集.

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

解决方法

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

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

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

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

猜你在找的C#相关文章