其实我很困惑。在成功响应后或在 NodeJS 中将流发送到输出设备后,变量是否成为 GC 的候选者?例如
var myObject = new myClass(),
xmlString = myObject.getXmlString();
res.write(xmlString);
res.end();
如果不是,那么如何 GC 这个对象或使 myObject 成为 GC 的候选对象?
其实我很困惑。在成功响应后或在 NodeJS 中将流发送到输出设备后,变量是否成为 GC 的候选者?例如
var myObject = new myClass(),
xmlString = myObject.getXmlString();
res.write(xmlString);
res.end();
如果不是,那么如何 GC 这个对象或使 myObject 成为 GC 的候选对象?
垃圾回收一般依赖于对对象的引用,或者缺少那里。由创建的对象一旦不再引用它就new myClass()
可以被收集。myObject
如果myObject
在 a 中声明function
,它通常会在执行到 a 末尾时被删除function
。
function foo() {
var myObject = new myClass();
} // `myObject` doesn't exist beyond this
如果你想加快速度,你可以分配myObject
一个不同的值或delete
它:
myObject = null;
delete myObject;
有关详细信息,请参阅“什么是 JavaScript 垃圾回收? ”
例子:
var someString = 'hi there';
someString = 'not hi there any more';
'hi there' 占用的内存在您为其分配其他内容(即'not hi there no more')后就可以进行垃圾收集了。现在假设您知道您不会再使用“hi there”,但没有其他方便的字符串可以分配给它,您可以“删除”它。
var someString = 'hi there';
delete someString;
在这种情况下,删除使“someString”引用的对象无效,但不一定立即释放内存。这只是帮助垃圾收集器知道您已经完成了 someString 变量,尽管它仍在范围内。也许是因为它被用作某些闭包或类似的东西的初始化。
注意:使用'new'关键字不会改变上面的逻辑。