垃圾收集器是否在多次设置_globalObject = new()时释放内存

时间:2014-01-21 18:24:27

标签: c# garbage-collection

我多次点击setABC(id)

MyClass _globalObject;

setABC(id)
{
   _globalObject = new MyClass(id);
}

垃圾收集器是否从内存中销毁旧对象并将新对象分配给_globalObject,或者它只是创建一个新对象并分配给_globalObject,每次调用setABC(id)时消耗内存; < / p>

(编辑)也许我没说好,我不关心GC何时发生,而是下面的代码会破坏内存中的旧对象并将新对象分配给{{1通过不多消耗一次内存来进行多次调用。

_globalObject

2 个答案:

答案 0 :(得分:2)

在为其分配新引用之前,它不会“销毁”_globalObject引用的旧对象。

基本上,您只需使用新引用覆盖变量的内容。

旧引用被替换,因此旧对象现在位于内存中,没有对它的有效引用。

在某些时候,垃圾收集器将运行,并重新安排内存,从而重用第一个对象占用的内存。

因此,如果您继续执行该代码,那么暂时您将在内存中拥有2个或更多该对象。

答案 1 :(得分:1)

当垃圾收集器运行时,它将清除_globalObject的先前分配,为GC上的每个赋值消耗空间,直到GC运行并扫描未引用的对象(在这种情况下,_globalObject之前指向的MyClass实例) )。

如果您想看到这一点,请下载RedGates ANTS内存分析器的试用版并将其附加到您的过程中。