`
xiaotian_ls
  • 浏览: 304282 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

Internet Explorer 的内存泄漏问题

阅读更多

Internet Explorer Web 浏览器(在 IE 4 到 IE 6 中核实)的垃圾收集系统中存在一个问题,即如果 ECMAScript 和某些宿主对象构成了 “循环引用”,那么这些对象将不会被当作垃圾收集。此时所谓的宿主对象指的是任何 DOM 节点(包括 document 对象及其后代元素)和 ActiveX 对象。如果在一个循环引用中包含了一或多个这样的对象,那么这些对象直到浏览器关闭都不会被释放,而它们所占用的内存同样在浏览器关闭之前都不会交回系统重用。

当两个或多个对象以首尾相连的方式相互引用时,就构成了循环引用。比如对象 1 的一个属性引用了对象 2 ,对象 2 的一个属性引用了对象 3,而对象 3 的一个属性又引用了对象 1。对于纯粹的 ECMAScript 对象而言,只要没有其他对象引用对象 1、2、3,也就是说它们只是相互之间的引用,那么仍然会被垃圾收集系统识别并处理。但是,在 Internet Explorer 中,如果循环引用中的任何对象是 DOM 节点或者 ActiveX 对象,垃圾收集系统则不会发现它们之间的循环关系与系统中的其他对象是隔离的并释放它们。最终它们将被保留在内存中,直到浏览器关闭。

闭包非常容易构成循环引用。如果一个构成闭包的函数对象被指定给,比如一个 DOM 节点的事件处理器,而对该节点的引用又被指定给函数对象作用域中的一个活动(或可变)对象,那么就存在一个循环引用。DOM_Node.onevent ->function_object.[[scope]] ->scope_chain ->Activation_object.nodeRef ->DOM_Node。形成这样一个循环引用是轻而易举的,而且稍微浏览一下包含类似循环引用代码的网站(通常会出现在网站的每个页面中),就会消耗大量(甚至全部)系统内存。

多加注意可以避免形成循环引用,而在无法避免时,也可以使用补偿的方法,比如使用 IE 的 onunload 事件来来清空(null)事件处理函数的引用。时刻意识到这个问题并理解闭包的工作机制是在 IE 中避免此类问题的关键。

分享到:
评论

相关推荐

    js内存泄露问题

    5. **Internet Explorer特定的泄漏**:IE浏览器在历史上存在一些特有的内存泄漏模式,例如DOM元素与CSS样式表对象之间的异常引用,或者ActiveX对象的不当使用。 为了检测和解决JavaScript内存泄漏,可以使用一些...

    Iframe内存泄露分析

    1. Circular References:互相引用是最常见的内存泄漏原因,例如在 Internet Explorer 的 COM 基础设施和任何 scripting engine 之间的互相引用,objects 可以泄露内存。 2. Closures:闭包是一种特殊的互相引用,...

    IE内存泄露分析工具:sIEve/Drip

    标题中的“IE内存泄露分析工具:sIEve/Drip”指的是两个专门用于检测和分析Internet Explorer浏览器内存泄漏问题的工具。sIEve和Drip是独立的工具,但它们都致力于帮助开发者定位和解决IE浏览器中的内存管理问题。 ...

    css样式和内存泄漏

    不同的浏览器,如Firefox和IE(Internet Explorer),对CSS的解析方式可能存在差异,这导致了兼容性问题。例如,“新建 Microsoft Word 文档.doc”可能包含了关于如何处理这些差异的策略。在“Firefox 与 IE 对CSS的...

    ie内存泄露监控软件

    在IT行业中,内存泄露是一个至关重要的问题,尤其对于长时间运行的应用程序,如Web浏览器,例如Internet Explorer(简称IE)。"ie内存泄露监控软件"是专门针对IE浏览器设计的一种工具,旨在检测和分析IE客户端可能...

    ie内存泄漏检测软件

    然而,随着技术的发展,IE浏览器的一些问题逐渐暴露出来,其中最知名的便是“内存泄漏”问题。 内存泄漏,简单来说,是指程序在申请内存后,无法释放已申请的内存空间,一次小的内存泄漏可能影响不大,但随着时间...

    脚本IE内存泄露检测.rar

    总结来说,"脚本IE内存泄露检测.rar"是一个专为Internet Explorer设计的JavaScript内存泄漏检测工具,可以帮助开发者识别和解决JavaScript代码中的内存管理问题,提高应用程序的性能和稳定性。使用该工具需要运行...

    jquery 内存泄露bug

    sIEve是专门用于Internet Explorer的一个工具,它可以帮助开发者定位和修复JavaScript内存泄漏问题。通过运行这个工具,开发者可以获得内存快照,对比不同时间点的内存使用情况,从而找到可能的泄漏源。 总之,理解...

    Drip 检测IE内存泄漏

    标题 "Drip 检测IE内存泄漏" 提到的是一个专门用于检测 Internet Explorer (IE) 浏览器内存泄漏的工具,名为 Drip。内存泄漏是编程中的一个常见问题,尤其是在JavaScript环境中,由于IE浏览器的内存管理机制,这个...

    sIEve IE内存泄露监控

    `sIEve IE内存泄露监控` 是一款专注于检测和分析Internet Explorer(简称IE)浏览器内存泄漏问题的工具。它作为一个绿色软件,无需安装即可直接运行,为用户提供了一种方便的方式来检测网页在IE浏览器中可能导致性能...

    测试JavaScript在IE中的内存泄露

    然而,在某些情况下,尤其是在老版本的Internet Explorer(IE)浏览器中,可能会出现内存泄露问题。内存泄露是指程序在申请内存后,无法释放已申请的内存空间,一次小的内存泄露可能没什么大碍,但随着时间推移,...

    测试内存泄露测试软件

    sIEve-0.0.8.exe很可能是一款内存分析工具,可能专注于对Internet Explorer浏览器的内存使用情况进行检测,因为其名称中包含了“IE”字样。这种工具通常会提供实时内存使用图表,显示内存分配和释放的情况,以及可能...

    Internet Explorer

    7. **内存监视**:跟踪内存分配和释放,发现内存泄漏。 **四、IE特有的JavaScript问题及解决方案** 1. **ActiveXObject**:IE特有的对象,用于与ActiveX控件交互。在其他浏览器中不支持,需要进行条件注释或使用...

    IE下的内存泄露问题解决方案(英文)

    在IT领域,尤其是在Web开发中,内存泄露是一个常见的问题,特别是在旧版本的Internet Explorer(IE)浏览器中。本文将深入探讨IE下的内存泄露问题及其解决方案,并解析JavaScript闭包的多种用法,帮助开发者更好地...

    Javascript内存泄露

    然而,在某些特定情况下,即使对象不再被直接引用,也可能因为其他原因导致内存无法被回收,这就引发了内存泄露问题。 #### 三、循环引用 循环引用是导致内存泄露的一个常见原因。具体来说,如果两个或多个对象...

    extjs 2.2 内存泄漏补丁

    尤其是在老旧的Internet Explorer 6(IE6)浏览器上,这个问题尤为严重。 内存泄漏是指程序在分配内存后无法正确释放,导致系统资源持续消耗,最终可能导致浏览器性能下降甚至崩溃。对于ExtJS这样的库,内存泄漏...

    sIEve-0.0.8(IE Sieve_检测IE内存泄露情况)

    sIEve-0.0.8是一款专为解决IE内存泄露问题而设计的工具,它的主要目标是帮助开发者和用户检测并定位IE的内存泄露情况。 内存泄露通常发生在程序错误地分配和释放内存时。对于像IE这样的浏览器,它会加载各种网页和...

    javascript 内存泄漏

    在实际中,如果你怀疑浏览器存在内存泄漏,可以考虑Internet Explorer和Mozilla Firefox这两个与JavaScript内存泄漏最常相关的浏览器。了解这些浏览器中组件对象模型如何管理DOM对象,以及内存是如何通过引用计数...

    IE内存泄漏检测工具 Drip-0.5

    在Web开发中,内存泄漏是一个常见的问题,尤其是在使用老版本的Internet Explorer(IE)浏览器时。IE由于其独特的内存管理机制,常常会出现JavaScript(JS)内存泄漏的情况,这会导致浏览器运行缓慢,甚至崩溃。为了...

    JavaScript_内存泄露

    在Internet Explorer (IE)浏览器中,内存泄露问题尤为突出,尤其是对于DOM元素和JavaScript对象间的循环引用。IE在早期版本中有一个著名的内存泄露问题,当DOM节点和JavaScript对象通过事件监听器或其他方式相互引用...

Global site tag (gtag.js) - Google Analytics