Roy*_*mir 5 .net c# heap struct garbage-collection
我在想 ,
班级的实例是在堆上.(其中的值类型也在堆中).
但是相反的情况呢?
这里有一个问题,但没有提到任何GC相关信息.
那么 - GC如何处理这种情况?
public struct Point
{
object o ;
public int x, y;
public Point(int p1, int p2)
{
o = new Object();
x = p1;
y = p2;
}
}
Run Code Online (Sandbox Code Playgroud)
Point包括对堆上对象的引用.一旦不再Point存在该引用的副本,这将有资格收集.注意到:
Point p1 = new Point(1,2);
Point p2 = p1;
Run Code Online (Sandbox Code Playgroud)
是2个副本,每个副本都引用堆上的同一个对象.如果这些点作为字段存储在对象的某个地方,那么显然对象的生命周期至少与具有这些字段的对象一样长.如果这些点只是堆栈上的变量,那么它会变得更复杂,因为GC可能会考虑是否再次读取变量.如果不是,则变量可能不会有效存在(或者可能).
路径可以是非常间接的,但它基本上归结为:GC可以从GC根源开始到达对象.