用memwatch-node标识内存泄漏

我的Node.js项目遭受内存泄漏,我已经在闭包中设置variables为null,我的意思是,我知道这样的代码:

var a = 0; var b = 1; var c = 0; example_func(c, func(){ console.log(b); }); 

会造成内存泄漏,所以我添加一些代码来将这些variables设置为null;

 var a = 0; var b = 1; var c = 0; example_func(c, func(){ console.log(b); a = null; b = null; c = null; }); 

但我仍然有泄漏,所以我尝试使用memwatch-node来找出我的代码有什么问题。

结果表明, closure导致泄漏,但没有足够的指定目标。

我有这样的JSON

  { what: 'Closure', '+': 12521, size: '520.52 kb', '-': 5118, size_bytes: 533016 }, 

而且我想知道是否可以得到关于哪个泄漏泄漏的更具体的细节。

我已经为所有closures分配了名字,但仍然不起作用。

你无法得到更具体的关于哪个封闭。 memwatch获取v8堆的转储,然后获取它的差异,并报告泄漏,如果连续5次垃圾回收事件后,该对象types计数继续增长。

另外,我相信你对封闭是什么感到困惑。 closures的MDN页面给出了一个很好的描述。 闭包不是一个variables,而是一个范围,它使得函数能够保留引用,并在代码的一部分中使用时继续工作,否则这些variables引用将不可用。

如果你通过函数传递函数,那么闭包可以引用其他闭包。 所以,有可能你有一个closures,可能会有很多。

执行此操作:禁用部分代码,直到memwatch停止投诉。 然后,看看这个代码。 如果您仍然困惑,请在这个问题上发表更多的细节。