使用node.js .10.2我遇到了内存泄漏(有点)有意义,但我相信它是一个错误。你们觉得怎么样?
function Go(foo)
{
var someArray = [];
fillArrayWithLotsOfStuff(someArray);
doSomethingWithArray(someArray,
function(){
setTimeout(function(){Go(foo);},0);
});
}
如果我将someArray的声明移到更高的范围,那么内存泄漏就会消失(大部分时间)。发生泄漏是因为setTimeout创建的闭包在函数作用域中保持对someArray的引用。封闭本身也不会被垃圾收集,所以仍然存在泄漏,但要小得多。它好像这是递归,但它不是。是的,Go将从内部调用,但它立即返回,因此,IMO,应该清理上一个实例。
这可以被重写以完成相同的事情,完全没有泄漏。对我来说这不是问题,只是讨论的话题......
编辑:修改代码示例。忘了为setTimeout提供了一个匿名函数。这一切都有所不同。