Csharp/C#教程:什么时候是一个垃圾收集对象?分享


什么时候是一个垃圾收集对象?

在c#中,当没有对象的引用时,对象会被垃圾回收。 假设是这种情况,是否会收集以下任何一种情况,或者垃圾收集器是否足够智能以丢弃它们?

class Program { static void Main() { A a = new A(); ab = new B(); aba = a; a = null; } { class A { public B b; } class B { public A a; } 

一旦不再需要它们,它们都将有资格收集。 这意味着在某些情况下,甚至可以在定义对象的范围结束之前收集对象。 另一方面,实际的收集可能也会发生得更晚。

.NET垃圾收集器不基于引用计数,因此循环依赖没有区别。

它基于标记和扫描算法,它将所有对象视为集合的候选对象,然后从可用的根(局部变量,静态变量)遍历对象图,将它们标记为仍然“活着”。 那些没有被标记为仍在使用中的,被收集。 请注意这是一个简单的描述:.NET中的真实算法适用于标记和扫描,托管堆分为3代+大对象堆,完全忽略完成等。

我建议查看Maoni Stephens的博客以获取更多信息。

上述就是C#学习教程:什么时候是一个垃圾收集对象?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/1015394.html

(0)
上一篇 2021年12月30日
下一篇 2021年12月30日

精彩推荐