我多次点击setABC(id)
。
MyClass _globalObject;
setABC(id)
{
_globalObject = new MyClass(id);
}
垃圾收集器是否从内存中销毁旧对象并将新对象分配给_globalObject
,或者它只是创建一个新对象并分配给_globalObject
,每次调用setABC(id)时消耗内存; < / p>
(编辑)也许我没说好,我不关心GC何时发生,而是下面的代码会破坏内存中的旧对象并将新对象分配给{{1通过不多消耗一次内存来进行多次调用。
_globalObject
答案 0 :(得分:2)
在为其分配新引用之前,它不会“销毁”_globalObject
引用的旧对象。
基本上,您只需使用新引用覆盖变量的内容。
旧引用被替换,因此旧对象现在位于内存中,没有对它的有效引用。
在某些时候,垃圾收集器将运行,并重新安排内存,从而重用第一个对象占用的内存。
因此,如果您继续执行该代码,那么暂时您将在内存中拥有2个或更多该对象。
答案 1 :(得分:1)
当垃圾收集器运行时,它将清除_globalObject的先前分配,为GC上的每个赋值消耗空间,直到GC运行并扫描未引用的对象(在这种情况下,_globalObject之前指向的MyClass实例) )。
如果您想看到这一点,请下载RedGates ANTS内存分析器的试用版并将其附加到您的过程中。