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