nop*_*ole 6 internet-explorer garbage-collection memory-leaks
学习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
}
Run Code Online (Sandbox Code Playgroud)
IE可以处理循环引用以进行垃圾收集,但是当循环引用同时涉及DOM对象和Javascript对象时,因为它们由不同的内存管理器处理.
和:
[内存泄漏......]即使我们离开页面,IE也无法释放生成的[引用]循环.
在浏览器关闭之前永远不会释放.
这是真的吗?为什么即使用户离开页面,IE也不会释放这些内存?是因为用户可以点击Back
并返回页面,IE想要保持页面的状态吗?在这种情况下,如果用户在内存泄漏页面上,然后单击Back
,然后转到google.com,该怎么办?然后,任何Back
或页面都无法查看Forward
,并且内存泄漏问题可能会在不关闭浏览器的情况下消失?
或者即使关闭选项卡,也不关闭浏览器?
IE 8中也会发生这种内存泄漏吗?
内存泄漏是一类程序错误,所以您基本上是在问“为什么 IE 有错误?”。显然,答案是“因为程序员在某个地方犯了错误”。
虽然某些浏览器即使在您离开页面时也会故意保留页面状态(特别是 Opera 和 FF),但“内存泄漏”意味着程序不再使用但忘记释放的内存。在这种情况下,IE 已经停止关心这部分内存,但没有将此告诉操作系统(Windows),操作系统仍然将其视为“由 IE 使用”。所以这部分内存挂在无人区,直到浏览器关闭——因为当浏览器进程退出时,操作系统将分配给该进程的所有内存标记为“空闲”。
内存泄漏是一种相当阴险的错误,因为程序看似运行正常,但逐渐消耗越来越多的内存。
有关此主题的进一步阅读,请参阅http://en.wikipedia.org/wiki/Circular_reference和http://en.wikipedia.org/wiki/Garbage_collection_(computer_science) 。
归档时间: |
|
查看次数: |
2578 次 |
最近记录: |