V8中的内存泄漏漏洞?

时间:2013-06-26 16:02:53

标签: javascript node.js v8

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

0 个答案:

没有答案