【发布时间】:2016-05-17 16:08:49
【问题描述】:
It is not a duplicate,我想在 C# 的上下文中了解这一点。
我有这样的课程:
public class A
{
public List<string> AList { get; set; }
}
public class B
{
public List<string> BList { get; set; }
}
想象一下,在row 6 发生垃圾收集:
1 row: A objectA = new A();
2 row: B objectB = new B();
3 row: objectA.AList = new List<string>() { "1", "2", "3" };
4 row: objectB.BList = objectA.AList;
5 row: objectA = null;
6 row: //Garbage collection occurs
我有两个问题:
我的第二个问题是下图关于如何在堆中分配对象是否正确。我的意思是,
objectA.AList是放在一个圆圈内(上图)还是靠近圆圈(下图):
【问题讨论】:
-
所以我不确定这个答案,所以希望有更好理解的人能够回答,但据我了解,没有任何引用它们的对象最终应该 被垃圾收集,不需要其他任何东西。一个对象最终需要活动范围(在引用链上)到当前正在执行的程序,以便不被垃圾收集。一旦它消失了,无论何时运行,这对收集器来说都是公平的游戏。
-
这需要 2 分钟来检查。但是逻辑在我的脑海中决定,是的,因为 objectB.Alist 包含对 Alist 的引用,所以如果 Alist 被更改,那么 objectB.Alist 的结果也是 Alist。因此,如果 Alist 等于 null,objectB.Alist 也是如此。所以 Alist 的内容是 GC 的。但是对象 Alist 不是,它现在是 null
-
@HenkHolterman 请看我的独特问题stackoverflow.com/questions/37293387/…
标签: c# garbage-collection