我的Node.js项目存在内存泄漏问题,我已经在闭包中将变量设置为null,我的意思是,我知道像下面这样的代码:
var a = 0;
var b = 1;
var c = 0;
example_func(c, func(){
console.log(b);
});
会导致内存泄漏,所以我添加了一些代码将这些变量设置为 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 },
我想知道哪个闭包泄漏了,能否提供更具体的细节?我已经为所有的闭包指定名称,但仍然无效。
node-memwatch
中与closure
相关的源代码位于src/heapdiff.cc
的第 171 行,代码如下:case HeapGraphNode::kClosure: type.append("Closure"); break;
,其中kClosure
是由 V8 引擎定义的。 - bxshidelete
运算符而不是使用null
进行空值处理 - 这将清除符号表中的条目。顺便说一句,现在问题好多了。 - Beetroot-Beetroot