1

我有两个类,第二个继承第一个。

然后我有这个:

First[] tab = new First[5];
tab[0] = new First();
tab[1] = new First();
tab[2] = new First();

我的问题是:如果我这样做:

tab[1] = new Second();

我第一次用来调用 tab[1] 的内存发生了什么?它去垃圾收集和内存是免费的?

如果不是,我该怎么做才能释放它?

任何帮助,将不胜感激。

4

4 回答 4

3

从数组中替换对象会导致该对象不再被数组引用。

像任何其他对象一样,如果没有其他根对象引用它,它最终将被垃圾回收。

于 2012-05-02T18:36:06.217 回答
2

当你执行

tab[1] = new Second();

First曾经存在的那个实例tab[1]不再被引用,并被标记为垃圾回收。

在垃圾收集器运行之前,内存本身实际上不会再次可用,这不是立即的。

当然,这假设没有其他任何东西引用该实例。

如果你用谷歌搜索的话,有很多关于 .NET 垃圾收集器及其工作原理的精彩文章。

于 2012-05-02T18:38:17.600 回答
1

tab[1] 的“First”应该去垃圾收集(最终),因为没有其他变量指向该内存。

于 2012-05-02T18:36:37.397 回答
0

此外,您可以通过以下方式强制立即进行垃圾收集System.GC.Collect()

于 2012-05-02T18:44:11.497 回答