原帖在这里:http://topic.csdn.net/u/20090531/20/e0d47c96-3eb6-45ca-b824-31dddedd58c5.html,

我把楼主的例子改了一下,觉得这样写更紧凑!套用楼主的原话,当一个DOM对象包含一个Js对象的引用(例如一个Event Handler), 而这个Js对象又持有对这个DOM对象的引用时,一个环状引用就行成了,于是在ie下就出现了内存泄露。点击“运行代码”并打开任务管理器看内存变化。分别在ie8和ff下测试,差距不用多说。

运行代码 <script type="text/javascript"></script> <html> <head> <title>Memory leak</title> <style> body{ padding: 10px; } </style> </head> <body> </body> <script> var q = []; var n = 0; setInterval(function(){ q.push(makeSpan()); if(q.length>=10){ var s = q.shift(); if(s){ s.parentNode.removeChild(s); } } n++; },10); function makeSpan(){ var s = document.createElement("span"); document.body.appendChild(s); var t=document.createTextNode("*** " + n + " ***"); s.appendChild(t); s.οnclick=function(e){ s.style.backgroundColor="red"; alert(n); }; return s; }; </script> </html>

那么在ie下该怎么解决呢?

在删除节点的时候,手动破除环状引用,把里面setInterval那段代码稍微改动以下:

setInterval(function(){ q.push(makeSpan()); if(q.length>=10){ var s = q.shift(); if(s){ s.onclick = null;//关键在这里 s.parentNode.removeChild(s); } } n++; },10);

再用ie测试.

一个js内存泄露的好例子相关推荐

  1. 魔鬼的梦魇—验证IE中的js内存泄露模式(三)

    魔鬼的梦魇-验证IE中的js内存泄露模式(三) 按照Justin Rogers文章的顺序,接下来的这个模式应该是跨页内存泄露模式(cross-page leak),但是由于这个模式产生的中间对象,我们 ...

  2. 哪些操作会造成内存泄漏及Js内存泄露解决方法

    1.垃圾回收器定期扫描对象,并计算引用了每个对象的其他对象的数量.如果一个对象的 引用数量为 0(没有其他对象引用过该对象),或对该对象的惟一引用是循环的,那么该对象的 内存即可回收 2.setTim ...

  3. 梦魇java_[Java教程]魔鬼的梦魇—验证IE中的JS内存泄露模式(一)

    [Java教程]魔鬼的梦魇-验证IE中的JS内存泄露模式(一) 0 2012-05-08 07:00:04 随着移动互联网的发展,现在越来越多的应用开始想bs方向转移,原来很多复杂的计算逻辑也自然随着 ...

  4. js内存泄露 垃圾回收_Java内存体系结构(模型),垃圾回收和内存泄漏

    js内存泄露 垃圾回收 Java内存架构(Java内存模型) 上面是堆的Java内存模型以及Java虚拟机(JVM)中运行的任何Java应用程序的PermGen. 还提供了比率,以使您更好地了解如何在 ...

  5. github snap android,GitHub - albuer/heapsnap: HeapSnap 是一个定位内存泄露的工具,适用于Android平台。...

    HeapSnap 1.HeapSnap 是什么 HeapSnap 是一个定位内存泄露的工具,适用于Android平台. 主要特性如下: 对系统负载低 不需要修改目标进程的源代码 支持Andoroid上 ...

  6. node.js 内存泄露问题之解决

    因项目需要,要借用node.js 作为 js引擎,解析动态生成的 js 语句,并将结果返回给调用者.因此,基于nodes.js ,实现了一个简单的 httpserver,针对请求,生成动态js 语句, ...

  7. js 内存泄露,几种常涉及到的内存泄露

    概念:程序未进行有效的释放 1 全局变量 'use strict' //严格模式可以解决内存泄露 function fun(){ a = 1; this.b = 2;//this 指向window } ...

  8. js垃圾回收机制,内存泄露和内存溢出,解决闭包产生的内存泄露详解

    一.内存的周期和回收机制 分配内存----->使用内存----->释放内存 1.JS 环境中分配的内存有如下声明周期: 内存分配:当我们声明变量.函数.对象的时候,系统会自动为他们分配内存 ...

  9. JAVA 内存泄露详解(原因、例子及解决)

    Java的一个重要特性就是通过垃圾收集器(GC)自动管理内存的回收,而不需要程序员自己来释放内存.理论上Java中所有不会再被利用的对象所占用的内存,都可以被GC回收,但是Java也存在内存泄露,但它 ...

  10. LeakCanary: 让内存泄露无所遁形

    LeakCanary: 让内存泄露无所遁形 09 May 2015 本文为LeakCanary: Detect all memory leaks!的翻译.原文在: https://corner.squ ...

最新文章

  1. 2021年春季学期-信号与系统-第十二次作业参考答案-第五小题
  2. 我是如何将网站全站启用Https的?-记录博客安装配置SSL证书全过程
  3. MIL for PRE
  4. C++笔记——.和::和:和-的区别
  5. store_coding_state (cs_cm)的作用
  6. 字节跳动自研重度游戏;中国移动前董事长谈飞信失败;Linux 5.3-rc3 发布 | 极客头条...
  7. Java设计模式4:单例模式
  8. informix sybase数据库下载地址
  9. PMP®考试通过率多少
  10. 卸载creative cloud
  11. python-ip端口扫描器
  12. python量化投资实训班_Python量化投资实训营
  13. 桌面图标右键反应慢,至少30s左右出现菜单
  14. 解决IDEA中maven创建web项目时新建无jsp选择项
  15. 华为nova8计算机功能在,华为nova8隐藏功能怎么开启(华为nova8的隐藏功能)
  16. 蜂鸣器、风扇、震动马达
  17. VS Nuget的使用
  18. ROS机器人项目开发11例-ROS Robotics Projects-2019更新补充说明
  19. 动态代理com.sun.proxy.$Proxy3 cannot be cast to 。。。。
  20. 通过Safari与mobileconfig获取iOS设备UDID(设备唯一标识符)

热门文章

  1. 金蝶eas怎么引出凭证_金蝶专业版如何引入引出凭证
  2. python百度文库文字提取_百度文库文字爬取
  3. 这篇 CPU Cache,估计也没人看
  4. 淘宝生成器在线制作,淘宝全屏代码装修店招导航教程
  5. WebRTC SDP 详解和剖析
  6. php主动防御,汽车主动防御系统
  7. 西门子PLC开关量选择
  8. java 关键字小结
  9. 计算机考试一级b软件未来教育,2019.9全国计算机一级MS Office考试每日一练
  10. Anylogic遇到问题的解决