【问题标题】:Does circular references cause memory leaks in JavaScript?循环引用会导致 JavaScript 中的内存泄漏吗?
【发布时间】:2011-09-03 18:39:25
【问题描述】:

我已经阅读了许多声称循环引用会导致内存泄漏的说法:

所以我在 Chrome / FF4 / IE9 / Opera / Safari 上测试了这个脚本:

<script>
var a, b, list = [];

for(var x=0;x<1000000;x+=2){
    a = list[x] = document.createElement("div");
    b = list[x + 1] = document.createElement("div");
    a.hook = b;
    b.hook = a;
}
</script>

任务管理器显示该脚本消耗了约 0.2 GB 的内存。

然后我刷新了 10 次页面。如果脚本确实导致内存泄漏,在 10 次刷新后我应该会看到大约 2 GB 的内存消耗,但任务管理器会显示其他情况。

哪些浏览器中循环引用会导致 JavaScript 中的内存泄漏?

【问题讨论】:

标签: javascript debugging browser memory-leaks cross-browser


【解决方案1】:

内存泄漏主要是具有循环引用和引用计数垃圾收集的旧 IE 中的一个问题,这些垃圾收集永远不会完全回收所有内容(循环引用中的引用计数永远不会为 0)。

我认为自 IE8 以来 IE 中的内存泄漏问题已得到修复。

Microsoft have a in depth article on the subject.

【讨论】:

  • 也就是说,无论我们如何尝试,javascript 内存泄漏都不可能了?
  • @Pacerier Well IE7 和 IE6 还是很常见的。
  • 好的,让我重新表述我的问题。那么我们可以说在现代浏览器中内存泄漏是 100% 不可能了吗?
  • @Pacerier 我不能 100% 确定。您可以随时将源代码破解到您喜欢的开源浏览器中,看看在任何情况下是否有任何内存没有释放。
  • @Pacerier,微软厌倦了IE6;他们意识到按照现代标准来说这是非常可怕的,并希望让人们转向更好、更新的浏览器。他们不想因为糟糕的浏览器而闻名,只是因为人们最近没有升级......
猜你喜欢
  • 2010-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-02
  • 2012-12-11
  • 2021-03-23
相关资源
最近更新 更多