gpt4 book ai didi

c# - 对象何时进行垃圾回收?

转载 作者:太空狗 更新时间:2023-10-30 00:25:41 25 4
gpt4 key购买 nike

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

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

{

class A
{
public B b;
}

class B
{
public A a;
}

最佳答案

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

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

它基于mark-and-sweep算法,它将所有对象视为收集的候选者,然后从可用的根(局部变量、静态变量)遍历对象图,将它们标记为仍然“活着”。那些没有被标记为仍在使用的,会被收集起来。请注意,这是一个有点简化的描述:.NET 中的真正算法是适应标记和清除、托管堆分为 3 代+大对象堆、完全忽略终结等。

我建议检查 Maoni Stephens' blog获取更多信息。

关于c# - 对象何时进行垃圾回收?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15993209/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com