我有两个类,第二个继承第一个。
然后我有这个:
First[] tab = new First[5];
tab[0] = new First();
tab[1] = new First();
tab[2] = new First();
我的问题是:如果我这样做:
tab[1] = new Second();
我第一次用来调用 tab[1] 的内存发生了什么?它去垃圾收集和内存是免费的?
如果不是,我该怎么做才能释放它?
任何帮助,将不胜感激。
我有两个类,第二个继承第一个。
然后我有这个:
First[] tab = new First[5];
tab[0] = new First();
tab[1] = new First();
tab[2] = new First();
我的问题是:如果我这样做:
tab[1] = new Second();
我第一次用来调用 tab[1] 的内存发生了什么?它去垃圾收集和内存是免费的?
如果不是,我该怎么做才能释放它?
任何帮助,将不胜感激。
从数组中替换对象会导致该对象不再被数组引用。
像任何其他对象一样,如果没有其他根对象引用它,它最终将被垃圾回收。
当你执行
tab[1] = new Second();
First
曾经存在的那个实例tab[1]
不再被引用,并被标记为垃圾回收。
在垃圾收集器运行之前,内存本身实际上不会再次可用,这不是立即的。
当然,这假设没有其他任何东西引用该实例。
如果你用谷歌搜索的话,有很多关于 .NET 垃圾收集器及其工作原理的精彩文章。
tab[1] 的“First”应该去垃圾收集(最终),因为没有其他变量指向该内存。
此外,您可以通过以下方式强制立即进行垃圾收集System.GC.Collect()