`
hyj1254
  • 浏览: 340148 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

IE内存泄露与无法回收研究小结(持续增加中)

阅读更多
一、内存泄露
   之前确实看了很多资料,但这位大哥的话可谓画龙点睛,不是奉承他,一下子就打通了我的任督二脉,请看:
trarck 写道

   IE下的内存泄露原因就是循环引用,IE的垃圾回收器不能很好处理这种引用。
会产生泄露的循环引用,只有孤立的DOM对象(脱离DOM树)。
孤立的DOM对象间的循环引用,孤立的DOM对象与JS对象的循环引用
为什么是孤立的DOM对象呢?在离开页面时(刷新,跳转)会删除整个DOM树,在DOM树上的对象也会被删除,就算有循环引用,此时被打断。
孤立的DOM对象有:一、用JS创建但未加入DOM树。二、从DOM树中删除的。
所以避免泄露,就尽量不要让这样的DOM对象产生。
有时候这样对象又不可避免,那就不要让这样对像产生循环引用。
最常见的循环引用是由闭包产生,其执行环境中的变量(包括参数)引用了DOM对象。

   看完了这段话,只会战战兢兢模仿示例的我立即就自创了一个新的例子。
示例1:
<input type="button" value="leak" id="leak" onclick="location.reload();"/>

<script type="text/javascript"><!--
(function(){
		var test=$('<div />')[0];
		test.onclick=function(){};
		var s=[];
		for(var i=0;i<10000;i++){
			s.push('aaaa');
		}
		test.expan=s.join(''); 
		//$('body').append(test);
		//孤立的DOM元素才会泄露
})();		
//--></script>

特殊情况:iframe
测试工具为:sIEve-0.0.8
在iframe中刷新页面,页面中有很多泄露,每刷一次增加一倍;但最后刷新其父页面时所有的泄露都消失了。
而将iframe提出来单独测试(刷新),没有泄露。

二、内存回收
1、清除全局引用。道理很简单,只要全局引用存在浏览器不能释放对应的对象,因为在引用的生命周期内,对象随时可能被调用。
<input type="button" value="TO GC" onclick="toGC()" />
<script type="text/javascript"><!--
function toGC(){
	g.s=null;
}

var g={};
g.s=[];
for ( var i=0;i<100;i++){
	g.s.push($('<div  />')[0]);
}
//--></script>

如果不点击TO GC按钮,所创建的div永远都不会释放,直至页面unload。
2、各浏览器不同的内存释放机制
   一个正常(无泄漏)的页面,当它unload(比如href指向about:blank)时,在不同的浏览器中内存释放情况并不相同。做了测试,使用某著名电子商务网站作测试对象。
   IE7:不会出现显著释放,即使等1个小时也一样,内存依然很高;最小化窗口才会释放到几M的水准。
   FireFox3:无论如何都不释放,目前还没找到方法(当然,关闭窗口除外)。
   Chrome6:立即释放。

1
1
分享到:
评论

相关推荐

    ie内存泄漏检测软件

    在IE浏览器中,由于其JavaScript引擎的设计缺陷和与其他组件的交互方式,内存泄漏问题尤为突出。 **内存泄漏的原因** 1. **全局变量和闭包**:JavaScript中,全局变量和闭合函数会持续引用内存,导致对象无法被...

    ie内存泄露监控软件

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

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

    该工具可以记录IE在运行过程中内存分配和释放的情况,从而帮助开发者找出可能导致内存泄漏的代码段。当IE浏览器的内存占用持续增长,而没有得到适当的释放时,就可能出现内存泄漏问题。这会导致浏览器性能下降,甚至...

    测试JavaScript在IE中的内存泄露

    内存泄露是指程序在申请内存后,无法释放已申请的内存空间,一次小的内存泄露可能没什么大碍,但随着时间推移,积累的内存泄露会消耗大量系统资源,导致浏览器响应变慢,甚至崩溃。 标题"测试JavaScript在IE中的...

    Drip 检测IE内存泄漏

    1. **内存泄漏定义**:内存泄漏是指程序在申请内存后,无法释放已申请的内存空间,一次小的内存泄漏可能不明显,但随着时间推移,积累的内存泄漏会消耗大量系统资源,影响程序运行效率。 2. **IE浏览器中的内存泄漏*...

    脚本IE内存泄露检测.rar

    标题中的“脚本IE内存泄露检测.rar”表明这是一个专门针对Internet Explorer浏览器的JavaScript内存泄漏检测工具。内存泄漏是编程中常见的问题,特别是在处理大量数据或长时间运行的网页应用时,可能导致浏览器性能...

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

    **sIEve-0.0.8:检测IE内存泄露情况** 在互联网浏览器的世界中,Microsoft Internet Explorer(简称IE)曾经是主流的选择。然而,由于其在性能和稳定性上的问题,尤其是内存泄露问题,IE逐渐失去了市场份额。内存...

    sIEve IE内存泄露监控

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

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

    内存泄漏是指程序在申请内存后,无法释放已申请的内存空间,一次小的内存泄漏可能看似无害,但随着时间推移,这些未释放的内存会不断积累,最终可能导致系统资源耗尽。 **JS内存泄漏的类型** 1. **全局变量和闭包:...

    IE 内存检测工具

    使用方法通常是启动sIEve,然后在IE浏览器中打开待测试的网页,当怀疑出现内存泄漏时,sIEve会显示相关的泄漏信息,包括泄漏对象的类型、大小以及可能的泄漏源。 **Drip-0[1].5(web内存泄漏检测工具).exe** Drip,...

    Android webview 内存泄露的解决方法

    最近在activity嵌套webview显示大量图文发现APP内存一直在涨,没法释放内存,查了很多资料,大概是webview的一个BUG,引用了activity导致内存泄漏,所以就尝试传递getApplicationContext。 1.避免在xml直接写webview...

    IE内存泄露之JQuery html(),append()

    内存泄露是指程序在申请内存后,无法释放已经不再使用的内存空间,导致系统可用内存持续减少,可能最终影响到整个系统的性能。在JavaScript中,由于垃圾回收机制的存在,一般情况下不会出现明显的内存泄露。但在特定...

    内存泄漏检测工具

    内存泄漏是程序运行过程中,不再使用的内存没有被正确释放,导致系统资源持续占用,从而影响程序性能甚至系统稳定性。在JavaScript这种动态语言中,由于其内存管理机制,开发者容易无意间造成内存泄漏。针对这个问题...

    IE内存泄露

    标题“IE内存泄露”指的是在使用Internet Explorer浏览器时,由于程序设计或实现的缺陷,导致内存资源无法正确释放,从而持续占用系统内存,随着时间推移可能导致系统性能下降甚至崩溃的问题。这种现象在早期版本的...

    javascript内存泄露问题的解析

    在Mozila和Opera浏览器中,虚拟PF利用率与Question1相同,但是在IE浏览器中,我们可以看到由于内存泄漏而产生的每秒一兆的虚拟内存的稳定增量。这表明了内存泄漏的问题更加严重。 内存泄露问题的解决方案: 1. ...

    IE内存监控sIEve-0.0.8

    3. **内存泄漏**:当程序分配的内存无法被正确释放,就会导致内存泄漏。长时间运行的程序如果存在内存泄漏,会逐渐消耗大量内存,影响系统整体性能。 4. **性能优化**:sIEve这样的工具可以帮助开发者定位IE浏览器...

    内存泄露检测工具

    内存泄露是指计算机程序在运行过程中,无法释放已经分配的内存空间,从而导致内存泄露的现象。内存泄露检测工具是用于检测和解决内存泄露问题的软件工具。以下是常用的内存泄露检测工具: 1. ccmalloc:是一个简单...

    js内存泄露问题

    JavaScript内存泄露是一个重要的性能优化话题,尤其是在...对于IE浏览器,由于其早期版本的垃圾收集机制不完善,内存泄露问题更为突出,文档《理解并解决IE的内存泄漏方式》可能会提供更具体的针对IE浏览器的解决方案。

    css样式和内存泄漏

    “JS关于ie的内存泄漏与javascript内存释放资料.doc”和“Js内存泄漏及解决方案.doc”可能详细解释了JavaScript中如何发生内存泄漏,尤其是在IE浏览器中的特殊情况。IE浏览器因为其独特的内存管理机制,如活动对象链...

    IE8 内存泄露(内存一直增长 )的原因及解决办法

    在IE8浏览器中,开发者可能遇到一个特定的问题,即内存泄露,表现为内存一直增长,直至浏览器崩溃。这种现象主要出现在使用定时局部更新的页面中,而在IE6、IE7以及Firefox等其他浏览器中则表现正常。本文将深入探讨...

Global site tag (gtag.js) - Google Analytics