gpt4 book ai didi

internet-explorer - 在 Internet Explorer 中,为什么即使导航离开页面,内存泄漏仍然存在?

转载 作者:行者123 更新时间:2023-12-04 15:15:57 25 4
gpt4 key购买 nike

书 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 对象时就不行,因为它们由不同的内存管理器处理。

和:

[the memory leak... and] the resulting [reference] looping can't be released by IE even when we navigate away from the page.

never freed until browser is closed.



这是真的吗?为什么即使用户离开页面 IE 也不释放这些内存?是不是因为用户可能会点击 Back回到页面,IE想保持页面的状态?这种情况下,如果用户在内存泄漏页面,然后点击 Back怎么办? ,然后转到 google.com?然后任何人都无法查看该页面 BackForward ,并且内存泄漏问题可以在不关闭浏览器的情况下消失吗?

或者甚至在选项卡关闭时,而不关闭浏览器?

这种内存泄漏是否也发生在 IE 8 中?

最佳答案

内存泄漏是一类程序错误,因此您基本上是在问“为什么 IE 有问题?”。显然,答案是“因为某个程序员在某个地方犯了错误”。

虽然一些浏览器会故意保持页面状态,即使您离开它(特别是 Opera 和 FF),“内存泄漏”意味着程序不再使用但忘记释放的内存。在这种情况下,IE 已经停止关心那部分内存,但没有告诉操作系统(Windows),它仍然认为它“被 IE 使用”。所以这部分内存会一直卡在无人区,直到浏览器关闭——因为当浏览器进程退出时,操作系统会将分配给该进程的所有内存标记为“空闲”。

内存泄漏是一种相当隐蔽的错误类型,因为程序似乎运行正常,但逐渐消耗越来越多的内存。

见例如http://en.wikipedia.org/wiki/Circular_referencehttp://en.wikipedia.org/wiki/Garbage_collection_(computer_science)有关此主题的进一步阅读。

关于internet-explorer - 在 Internet Explorer 中,为什么即使导航离开页面,内存泄漏仍然存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3083196/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com