0

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

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

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

如果不是,那么如何 GC 这个对象或使 myObject 成为 GC 的候选对象?

4

2 回答 2

2

垃圾回收一般依赖于对对象的引用,或者缺少那里。由创建的对象一旦不再引用它就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 垃圾回收?

于 2013-08-26T20:54:16.623 回答
1

例子:

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

于 2013-08-26T20:53:15.920 回答