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
我有两个问题:
答案 0 :(得分:5)
是的,objectA
引用的变量将 - 或者至少可能被垃圾收集。那里没有没有引用它了。 (不保证会收集&#34;很快&#34;,但它符合条件进行垃圾收集。)
objectA.AList
引用的列表不会被垃圾收集,因为objectB.BList
现在引用它。
第一个图表的问题是一个对象是&#34;内部&#34;另一个。这不是它的工作原理 - 一个对象只是维护一个引用到另一个对象,但每个对象实际上是一个独立的内存...如果没有任何引用从某个特定的对象,它有资格进行垃圾收集。