结构与参考类型和GC?

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)

Mar*_*ell 7

Point包括对堆上对象的引用.一旦不再Point存在该引用的副本,这将有资格收集.注意到:

Point p1 = new Point(1,2);
Point p2 = p1;
Run Code Online (Sandbox Code Playgroud)

是2个副本,每个副本都引用堆上的同一个对象.如果这些点作为字段存储在对象的某个地方,那么显然对象的生命周期至少与具有这些字段的对象一样长.如果这些点只是堆栈上的变量,那么它会变得更复杂,因为GC可能会考虑是否再次读取变量.如果不是,则变量可能不会有效存在(或者可能).

路径可以是非常间接的,但它基本上归结为:GC可以从GC根源开始到达对象.