从数组中更改的项目是否转到垃圾收集?

时间:2012-05-02 18:32:31

标签: c# .net garbage-collection clr

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

然后我有了这个:

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

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

tab[1] = new Second();

我第一次用来调用标签[1]的内存是怎么回事?它是垃圾收集和内存是免费的?

如果不是我可以做些什么来解放它?

任何帮助都将不胜感激。

4 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:2)

执行时

tab[1] = new Second();

以前在First中的tab[1]实例不再被引用,并标记为垃圾回收。

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

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

如果你使用Google垃圾收集器,那么.NET垃圾收集器上有很多很多的精彩文章及其工作原理。

答案 2 :(得分:1)

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

答案 3 :(得分:0)

此外,您可以通过System.GC.Collect()

强制立即进行垃圾回收