【发布时间】:2010-06-21 08:50:48
【问题描述】:
Learning jQuery 一书说 IE 对具有引用函数的属性的 DOM 对象存在内存泄漏,并且该函数也引用 DOM 对象,因此具有“循环引用”,如下所示:
onload = function() {
var foo = document.getElementById('foo');
foo.onclick = function() { // DOM object foo's onclick property refers to a function
foo.innerHTML = "hello" // the function's body refers to the DOM object
} // therefore circular reference
}
IE 可以处理循环引用以进行垃圾回收,但当循环引用同时涉及 DOM 对象和 Javascript 对象时则不能,因为它们由不同的内存管理器处理。
和:
[内存泄漏...和]结果 [参考]循环无法释放 通过 IE 即使我们离开 页面。
在浏览器关闭之前永远不会被释放。
这是真的吗?为什么即使用户离开页面,IE 也不释放这些内存?是不是因为用户可能点击Back回到页面,而IE想保持页面的状态?那样的话,如果用户在内存泄漏页面,然后点击Back,然后去google.com怎么办?那么页面不被Back或Forward看到,不关闭浏览器就可以解决内存泄漏问题?
或者即使关闭了标签页,也不关闭浏览器?
IE 8 中是否也会发生这种内存泄漏?
【问题讨论】:
-
很多程序存在内存泄漏问题;虽然许多内存泄漏已被插入到较新的 IE 版本中,但很难将它们全部插入到这种大小的项目中。
标签: internet-explorer memory-leaks garbage-collection