如何在NodeJS中为GC创建变量候选项

时间:2013-08-26 20:25:37

标签: node.js garbage-collection

其实我很困惑。在成功响应之后或者在NodeJS中将流发送到输出设备之后,变量是GC的候选者吗?例如

var myObject = new myClass(),
    xmlString = myObject.getXmlString();

res.write(xmlString); 
res.end();

如果没有那么如何GC这个对象或使myObject成为GC的候选者?

2 个答案:

答案 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'关键字不会改变上面的逻辑。