Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 更改的项是否从数组转到垃圾回收?_C#_.net_Garbage Collection_Clr - Fatal编程技术网

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。