using System;
class ClassOfInts
{
public int x;
public int y;
}
class Test
{
ClassOfInts objClassOfInts;
string name;
public TestMethod(int p, int q, string s)
{
objClassOfInts=new ClassofInts;
objClassOfInts.x=p;
objClassOfInts.y=q;
name=s;
}
}
class Main
{
static Main()
{
Test t1=new Test();
Test t2=new Test();
t1.TestMethod(1,2,"First");
//XXX
t2.TestMethod(2,3,"Second");
//YYY
}
}
上述程序达到XXX时的内存分配是多少。参考变量objClassInts是否仍会在Heap中对其对象进行处理。或者一旦TestMethod完成执行,objClassInts将被提供为null。
答案 0 :(得分:2)
Test
的每个实例都有自己的objClassOfInts
实例。该实例将与Test
实例一样长。
在您的示例中,这意味着它们将一直存在到Main
结束。
答案 1 :(得分:1)
我不确定我是否遵循了这个问题,但除非您将对象设置为null,否则如果您仍然可以访问它,那么该对象仍将存在。垃圾收集的好处是,对象在代码的某些部分不会出乎意料地消失,只有在无法访问它们时才能消除它们。
答案 2 :(得分:1)
当执行达到XXXX时,t1引用的对象有资格进行垃圾回收。其中包括其字段,objClassOfInts和name所持有的对象引用。当它达到YYYY时,t1和t2引用的对象都是合格的。在调试模式下,在方法退出之前,它们将不符合条件。它没有说明实际收集的时间,可能需要一段时间。
答案 3 :(得分:0)
objClassOfInts不会为空。它从null开始,但只要Test对象是实时的,它所引用的所有对象也将是实时的。