我又一次深入研究了 javascript 内存泄漏。我的问题是在阅读Ilya Kantor的文章时提出的。
正如 Ilya 指出的那样,我知道 DOM-/COM-对象和 javascript 对象之间的循环引用导致 ie 的内存泄漏。
我也知道由于内部函数的词法环境被实现为david glasser解释的单例而导致的内存泄漏。
我的情况不同:哪些 javascript 引擎(如果有)会泄漏,data
即分配data
到wrapped
的词法环境,尽管在以下示例中没有引用?
function factory () {
var data = 'bytebytebyte';
function wrapped () {
// (1), pass
}
// (2), clean up?
return wrapped;
}
wrapped
没有参考data
- 无论如何你都必须设置
data=null
不泄漏它吗?
伊利亚说(如果data
设置为null
)
现在数据仍然作为 LexicalEnvironment 的属性保留在内存中,但它并没有占用太多空间。
大卫 说
幸运的是,JavaScript 实现(或至少是当前的 Chrome)足够聪明,可以注意到
data
[wrapped
...]
斯科特克里斯托弗在他的回答中提出了一个类似的问题,如果不是同一个问题。
这太模糊了,一个明确的答案会很棒!setInterval
也许有人在使用上述方法时碰巧在 ie-vm 上绘制了内存使用图factory
?