1

使用 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 提供了一个匿名函数。这使一切变得不同。

4

0 回答 0