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

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

看完了这段话,只会战战兢兢模仿示例的我立即就自创了一个新的例子。 
示例1:

  1. ;i++){
  2. s.push('aaaa');
  3. }
  4. test.expan=s.join('');
  5. //$('body').append(test);
  6. //孤立的DOM元素才会泄露
  7. })();
  8. //--></script>

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

二、内存回收 
1、清除全局引用。道理很简单,只要全局引用存在浏览器不能释放对应的对象,因为在引用的生命周期内,对象随时可能被调用。

  1. ;i++){
  2. g.s.push($('<div  />')[0]);
  3. }
  4. //--></script>

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

IE内存泄露与无法回收研究小结的更多相关文章

  1. Java中内存泄露及垃圾回收机制

    转自:http://blog.sina.com.cn/s/blog_538b279a0100098d.html 写的相当不错滴...................... 摘  要 Java语言中,内 ...

  2. PHP的内存泄露问题与垃圾回收

    你写了一个PHP脚本,一般都不用考虑内存泄露和垃圾回收的问题,因为一般情况下你的脚本很快就执行完退出了. 但在一些运行时间长,数据量大的时候,程序运行一段时间后,php脚本就占用了过多内存,然后就报错 ...

  3. Android 性能优化之使用MAT分析内存泄露问题

    我们平常在开发Android应用程序的时候,稍有不慎就有可能产生OOM,虽然JAVA有垃圾回收机,但也不能杜绝内存泄露,内存溢出等问题,随着科技的进步,移动设备的内存也越来越大了,但由于Android ...

  4. Android 性能优化之使用MAT分析内存泄露

    转载请注明本文出自xiaanming的博客(http://blog.csdn.net/xiaanming/article/details/42396507),请尊重他人的辛勤劳动成果,谢谢! 我们平常 ...

  5. JS闭包、作用域链、垃圾回收、内存泄露相关知识小结

    补充: 闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现. 闭包的三个特性: 1.函数嵌套函数 2.函数内部可以引用外部的参数和变量 3.参数和变 ...

  6. JavaScript垃圾回收(三)——内存泄露

    一.JavaScript内存监测工具 在讨论内存泄露之前,先介绍几款JavaScript内存监测工具. IE的sIEve与JSLeaksDetector(这两个可以在下面的附件中下载),firefox ...

  7. Java垃圾回收机制以及内存泄露

    1.Java的内存泄露介绍 首先明白一下内存泄露的概念:内存泄露是指程序执行过程动态分配了内存,可是在程序结束的时候这块内存没有被释放,从而导致这块内存不可用,这就是内存 泄露,重新启动计算机能够解决 ...

  8. 深入研究EF Core AddDbContext 引起的内存泄露的原因

    前两天逛园子,看到 @Jeffcky 发的这篇文章<EntityFramework Core依赖注入上下文方式不同造成内存泄漏了解一下>. 一开始只是粗略的扫了一遍没仔细看,只是觉得是多次 ...

  9. JS高程中的垃圾回收机制与常见内存泄露的解决方法

    起因是因为想了解闭包的内存泄露机制,然后想起<js高级程序设计>中有关于垃圾回收机制的解析,之前没有很懂,过一年回头再看就懂了,写篇博客与大家分享一下. #内存的生命周期: 分配你所需要的 ...

随机推荐

  1. struts1 和 struts2中Action什么时候实例化

    精帖1:http://blog.csdn.net/lfsf802/article/details/7277013 精帖1:http://blog.csdn.net/wmj2003/article/de ...

  2. websphere OSGi应用环境下服务调用saaj包加载问题分析报告

    websphere OSGi应用环境下服务调用saaj包加载问题分析报告 作者:bingjava 版权声明:本文为博主原创文章,转载请说明出处:http://www.cnblogs.com/bingj ...

  3. iOS网络传输Delegate不被触发的本质原因

    NSURLSession一共有四种Delegate (文后附表有Session和SessionTask分类表格) NSURLSessionDelegate, NSURLSessionDownloadD ...

  4. 802.11 wireless 三

    802.11 wireless 3watts,milliwatts,and Decibels瓦特(功率单位)的定义是1焦耳/秒微波炉1000瓦特,手机100-200毫瓦 decibels(分贝:比较能 ...

  5. CHtml::radioButtonList

    public function getSortList(){ $arr = array(); $arr[0]['id']=0; $arr[0]['name']="否"; $arr[ ...

  6. SQL Server 2008中新增的 1.变更数据捕获(CDC) 和 2.更改跟踪

    概述 1.变更数据捕获(CDC)        每一次的数据操作都会记录下来 2.更改跟踪       只会记录最新一条记录   以上两种的区别:         http://blog.csdn.n ...

  7. SQLite中的日期基础

    SQLite包含了如下时间/日期函数: datetime().......................产生日期和时间 date()...........................产生日期 t ...

  8. Web Component 文章

    周末无意中了解了Web Component的概念. http://blog.amowu.com/2013/06/web-components.html http://www.v2ex.com/t/69 ...

  9. Visual Studio 快捷键

    Visual Studio 快捷键 CTRL + DELETE 删除至词尾 CTRL + BACKSPACE 删除至词头Ctrl+Shift+L: 删除当前行 Ctrl+K+Crtr+C: 注释选定内 ...

  10. m_pMainWnd(转载)

    今天写程序时遇到个简单而又很有意思的问题,封装了一个网络接口类,发送数据以及网络的回调接口都在这个类里面,打算在回调函数里给AfxGetMainWnd()发送消息以更新主界面的数据,同时程序有一个登录 ...