JavaScript内存泄露
来源:互联网 发布:淘宝运费险漏洞 编辑:程序博客网 时间:2024/06/08 08:35
JS内存泄露:
JS是一种垃圾收集式语言,内存是根据对象的创建分配给该对象的,并会在没有对该对象的引用时由浏览器收回,IE和Mozilla Firefox俊使用引用计数来为DOM对象处理内存,在引用计数系统,每个所引用的对象都会保留一个计数,以获悉有多少对象正在引用它,如果计数为零,该对象就会被销毁,其占用的内存也会返回给堆,这种方案在循环引用方面存在一些盲点
当一个DOM对象包含一个JS对象的引用(例如一个Event Handler),而这个JS对象又持有对这个DOM对象的引用时,一个环状引用就形成了,在IE浏览器中DOM结构并不受JS解释机制管理,所以它并不能理解这种失去外界引用的环状结构,导致环上的任何对象都无法被访问到,可是内存依旧占据着,这就是所谓的JS内存泄露
例子:
var q = [];var n = 0;setInterval(function(){q.push(makeSpan());if(q.length >= 10){var s = q.shift();if(s){a.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.onclick = function(e){s.style.backgroundColor = 'red';alert(n);}return s;}该例子在IE8下会出现内存泄露(可在执行时,打开任务管理器查看)
解决方案:
在删除节点的时候,手动破除环状引用
setInterval(function(){q.push(makeSpan());if(q.length >= 10){var s = q.shift();if(s){s.onclick = null;//解决内存泄露问题a.parentNode.removeChild(s);}}n++;},10)
0 0
- 关于javascript内存泄露
- javascript 内存泄露
- Javascript内存泄露
- javascript 中的内存泄露
- JavaScript 内存泄露
- javascript内存泄露
- javascript内存泄露
- javascript内存泄露
- JavaScript内存泄露
- JavaScript—内存泄露
- JavaScript 中的内存泄露模式
- JavaScript 中的内存泄露模式
- JavaScript 中的内存泄露模式
- javascript 内存泄露工具使用
- javascript 内存泄露工具使用
- javascript 内存泄露工具使用
- javascript 内存泄露工具使用
- javascript 内存泄露工具使用
- 关于SQL Server链接的问题
- AM335x SPL (四)
- 银行家算法——C语言(11计科1班-孙鹏启——修正)
- Windows下本地RabbitMQ服务的安装(V3.01)
- C++实现string存取二进制数据的方法
- JavaScript内存泄露
- 机器周期,指令周期,时钟周期,节拍与晶振
- MySQL数据库SYS CPU高的可能性分析
- binder的机制和原理
- Linux进程地址空间详解
- The application's PagerAdapter changed the adapter's contents without calling PagerAdapter#notifyDat
- 第五周项目1.3-三角形类雏形
- bss,data,text,rodata,堆,栈,常量段
- ubuntu14.04 + opencv3.1 + contrib modules