【问题标题】:how to prevent memory leak in javascript如何防止javascript中的内存泄漏
【发布时间】:2012-03-30 17:47:40
【问题描述】:

我陷入了 js 问题中的内存泄漏问题。

Javascript:

var index = 0;
function leak() {
    console.log(index);
    index++;
    setTimeout(leak, 0);
}
leak();

这是我的测试代码,我使用instruments.app 来检测它的内存使用情况, 而且内存增长得非常快。

我怀疑似乎没有变量占用内存。

为什么?

任何想法都值得赞赏。

【问题讨论】:

  • 那么你的生产代码是什么?也许只有重要的部分。修复导致问题的代码是没有意义的。
  • 生产代码会导致同样的问题。我只是想弄清楚如何在这些代码中释放内存使用。

标签: node.js memory garbage-collection


【解决方案1】:

您的代码创建了一组闭包。这可以防止内存的释放。在您的示例中,内存将在所有超时完成后释放。

可以看到(100 秒后):

var index = 0;
var timeout;
function leak() {
    index++;
    timeout = setTimeout(leak, 0);
}

leak();

setTimeout(function() {
        clearTimeout(timeout);
}, 100000);

setInterval(function() {
        console.log(process.memoryUsage());
}, 2000);

【讨论】:

  • omg,就是 settimeout 对象导致的问题。非常感谢。
  • 但是,世界上最糟糕的一句话,有一个问题,如果在没有触发泄漏的情况下发生cleartimeout事件,程序将关闭。我只是将 cleartimeout 事件放在泄漏函数中,所以它不会关闭。
猜你喜欢
  • 2015-06-11
  • 2010-12-20
  • 2011-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-21
  • 2016-07-10
相关资源
最近更新 更多