我读过很多声明,指出循环引用会导致内存泄漏:
- http://www.ibm.com/developerworks/web/library/wa-memleak/
- http://www.quirksmode.org/blog/archives/2005/02/javascript_memo.html
- http://www.javascriptkit.com/javatutors/closuresleak/index3.shtml
所以我在 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 中的内存泄漏?
最佳答案
内存泄漏主要是旧版 IE 中的一个问题,这些 IE 具有循环引用和引用计数垃圾回收,这些垃圾回收从未完全回收所有内容(循环引用中的引用计数永远不会为 0)。
我认为自 IE8 以来 IE 中的内存泄漏问题已得到修复。
关于javascript - JavaScript 中循环引用会导致内存泄漏吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6158972/