bxs*_*shi 11 closures memory-leaks node.js
我的Node.js项目遭遇内存泄漏,我已经在闭包中将变量设置为null,我的意思是,我知道这样的代码:
var a = 0;
var b = 1;
var c = 0;
example_func(c, func(){
console.log(b);
});
Run Code Online (Sandbox Code Playgroud)
会导致内存泄漏,所以我添加一些代码将这些变量设置为null;
var a = 0;
var b = 1;
var c = 0;
example_func(c, func(){
console.log(b);
a = null;
b = null;
c = null;
});
Run Code Online (Sandbox Code Playgroud)
但我仍然有泄密,所以我试着memwatch-node
找出我的代码有什么问题.
结果显示closure
导致泄漏,但未指定足够的目标.
我有这样的JSON
{ what: 'Closure',
'+': 12521,
size: '520.52 kb',
'-': 5118,
size_bytes: 533016 },
Run Code Online (Sandbox Code Playgroud)
我想知道我是否可以获得关于哪个封口泄漏的更具体的细节.
我为所有关闭分配了名称,但仍然无效.
您无法更具体地了解哪个关闭。memwatch 获取 v8 堆的转储,然后获取其差异,如果在连续 5 次垃圾收集事件之后,该对象类型计数继续增长,则报告泄漏。
另外,我相信您对什么是闭包感到困惑。关于闭包的 MDN 页面给出了很好的描述。闭包不是变量,而是一个作用域,它使函数能够保留引用,并在代码的一部分中使用时继续工作,否则这些变量引用将不可用。
如果您传递函数并保留对该函数的引用,则它的闭包可以引用其他闭包。因此,您可能有一个包含很多内容的闭包。
这样做:禁用部分代码,直到 memwatch 停止抱怨。然后,看看该代码。如果您仍然感到困惑,请在此问题中发布更多详细信息。
归档时间: |
|
查看次数: |
1334 次 |
最近记录: |