一个js内存泄露的好例子
原帖在这里: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内存泄露的好例子相关推荐
- 魔鬼的梦魇—验证IE中的js内存泄露模式(三)
魔鬼的梦魇-验证IE中的js内存泄露模式(三) 按照Justin Rogers文章的顺序,接下来的这个模式应该是跨页内存泄露模式(cross-page leak),但是由于这个模式产生的中间对象,我们 ...
- 哪些操作会造成内存泄漏及Js内存泄露解决方法
1.垃圾回收器定期扫描对象,并计算引用了每个对象的其他对象的数量.如果一个对象的 引用数量为 0(没有其他对象引用过该对象),或对该对象的惟一引用是循环的,那么该对象的 内存即可回收 2.setTim ...
- 梦魇java_[Java教程]魔鬼的梦魇—验证IE中的JS内存泄露模式(一)
[Java教程]魔鬼的梦魇-验证IE中的JS内存泄露模式(一) 0 2012-05-08 07:00:04 随着移动互联网的发展,现在越来越多的应用开始想bs方向转移,原来很多复杂的计算逻辑也自然随着 ...
- js内存泄露 垃圾回收_Java内存体系结构(模型),垃圾回收和内存泄漏
js内存泄露 垃圾回收 Java内存架构(Java内存模型) 上面是堆的Java内存模型以及Java虚拟机(JVM)中运行的任何Java应用程序的PermGen. 还提供了比率,以使您更好地了解如何在 ...
- github snap android,GitHub - albuer/heapsnap: HeapSnap 是一个定位内存泄露的工具,适用于Android平台。...
HeapSnap 1.HeapSnap 是什么 HeapSnap 是一个定位内存泄露的工具,适用于Android平台. 主要特性如下: 对系统负载低 不需要修改目标进程的源代码 支持Andoroid上 ...
- node.js 内存泄露问题之解决
因项目需要,要借用node.js 作为 js引擎,解析动态生成的 js 语句,并将结果返回给调用者.因此,基于nodes.js ,实现了一个简单的 httpserver,针对请求,生成动态js 语句, ...
- js 内存泄露,几种常涉及到的内存泄露
概念:程序未进行有效的释放 1 全局变量 'use strict' //严格模式可以解决内存泄露 function fun(){ a = 1; this.b = 2;//this 指向window } ...
- js垃圾回收机制,内存泄露和内存溢出,解决闭包产生的内存泄露详解
一.内存的周期和回收机制 分配内存----->使用内存----->释放内存 1.JS 环境中分配的内存有如下声明周期: 内存分配:当我们声明变量.函数.对象的时候,系统会自动为他们分配内存 ...
- JAVA 内存泄露详解(原因、例子及解决)
Java的一个重要特性就是通过垃圾收集器(GC)自动管理内存的回收,而不需要程序员自己来释放内存.理论上Java中所有不会再被利用的对象所占用的内存,都可以被GC回收,但是Java也存在内存泄露,但它 ...
- LeakCanary: 让内存泄露无所遁形
LeakCanary: 让内存泄露无所遁形 09 May 2015 本文为LeakCanary: Detect all memory leaks!的翻译.原文在: https://corner.squ ...
最新文章
- 2021年春季学期-信号与系统-第十二次作业参考答案-第五小题
- 我是如何将网站全站启用Https的?-记录博客安装配置SSL证书全过程
- MIL for PRE
- C++笔记——.和::和:和-的区别
- store_coding_state (cs_cm)的作用
- 字节跳动自研重度游戏;中国移动前董事长谈飞信失败;Linux 5.3-rc3 发布 | 极客头条...
- Java设计模式4:单例模式
- informix sybase数据库下载地址
- PMP®考试通过率多少
- 卸载creative cloud
- python-ip端口扫描器
- python量化投资实训班_Python量化投资实训营
- 桌面图标右键反应慢,至少30s左右出现菜单
- 解决IDEA中maven创建web项目时新建无jsp选择项
- 华为nova8计算机功能在,华为nova8隐藏功能怎么开启(华为nova8的隐藏功能)
- 蜂鸣器、风扇、震动马达
- VS Nuget的使用
- ROS机器人项目开发11例-ROS Robotics Projects-2019更新补充说明
- 动态代理com.sun.proxy.$Proxy3 cannot be cast to 。。。。
- 通过Safari与mobileconfig获取iOS设备UDID(设备唯一标识符)