循环引用是否会导致JavaScript中的内存泄漏?

时间:2011-05-28 00:51:35

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

我读过许多声明,声称循环引用会导致内存泄漏:

所以我在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中的内存泄漏?

1 个答案:

答案 0 :(得分:4)

内存泄漏主要是旧的IE中的问题,循环引用和引用计数垃圾收集从未完全回收所有内容(在循环引用中从不引用计数为0)。

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

Microsoft have a in depth article on the subject