C# 更改的项是否从数组转到垃圾回收?
我有两个类,第二个由第一个继承 那么我有这个,C# 更改的项是否从数组转到垃圾回收?,c#,.net,garbage-collection,clr,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(); 我第一次调用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]的“First”应转到垃圾收集(finally),因为没有其他变量指向该内存。tab[1]的“First”应转到垃圾收集(finally)因为没有其他变量指向该内存。执行时
tab[1] = new Second();
以前位于选项卡[1]
中的First
实例不再被引用,并被标记为垃圾收集
在垃圾回收器运行之前,内存本身实际上不会再次可用,这不是立即可用的
当然,这是假设没有其他东西引用该实例
有很多关于.NET垃圾收集器的优秀文章,以及它的工作原理,如果你在谷歌上搜索的话。当你执行时
tab[1] = new Second();
以前位于选项卡[1]
中的First
实例不再被引用,并被标记为垃圾收集
在垃圾回收器运行之前,内存本身实际上不会再次可用,这不是立即可用的
当然,这是假设没有其他东西引用该实例
如果你用谷歌搜索的话,有很多关于.NET垃圾收集器及其工作原理的优秀文章。此外,你可以通过
System.GC.Collect()强制立即垃圾收集。
此外,你可以通过System.GC.Collect()强制立即垃圾收集
GC.Collect
是一项高级功能,仅应在非常特殊的情况下使用。它的存在不应该让那些刚刚接受垃圾收集概念的人知道。GC.Collect
是一种高级功能,只应该在非常特殊的情况下使用。它的存在的知识不应该提供给那些刚刚接受垃圾收集概念的人。如果有对它的引用,它可以是GC的,当对象不可访问时,它们有资格成为GC。您可以有一百个引用(包括循环),但这些引用中没有一个可以被应用程序使用,这是垃圾。当然,弱引用(即使它们在使用中)也不会阻止GC。如果有对它的引用,GC就可以了,当对象不可访问时,它们就有资格进行GC。您可以有一百个引用(包括循环),但这些引用中没有一个可以被应用程序使用,这是垃圾。当然,弱引用(即使它们正在使用)也不会阻止GC。