JavaScript-内存泄漏问题
来源:互联网 发布:php将文件夹压缩成zip 编辑:程序博客网 时间:2024/06/15 13:20
内存泄漏
1. 概念
内存泄漏是指一块被分配的内存,既不能使用,又不能回收,直到浏览器进程结束。
2. 可能导致内存泄漏的几种情况
(1) 当页面中的元素被移除或者替换时,若元素绑定的事件没有被移除,在IE中不会做出处理,应该先移除绑定的事件。
(2) 普通循环引用可能导致内存泄漏:
<html>
<body>
<scripttype="text/javascript">
document.write("circularreferences between JavaScript and DOM!");
varobj;
window.onload= function(){
obj=document.getElementById("DivElement");
document.getElementById("DivElement").expandoProperty=obj;
obj.bigString=newArray(1000).join(new Array(2000).join("XXXXX"));
};
</script>
<divid="DivElement">Div Element</div>
</body>
</html>
如上述清单中所示,JavaScript 对象obj
拥有到 DOM 对象的引用,表示为 DivElement
。而 DOM 对象则有到此JavaScript 对象的引用,由expandoProperty
表示。可见,JavaScript对象和 DOM 对象间就产生了一个循环引用。由于 DOM 对象是通过引用计数管理的,所以两个对象将都不能销毁。
(3) 闭包中的循环引用:
varelem=document.getElementById(‘test’);
elem.addEventListener(‘click’,function(){
alter(‘You click’+elem.tagName);
});
DOM对象在闭包释放之前不会被释放,而闭包作为DOM对象的事件处理函数存在,所以DOM对象释放之前闭包也不会释放。这种情况,即使在DOM 树种把DOM对象删除,由于循环存在,DOM对象和闭包也不会被释放,应该改成 this.tagName;
(4) 闭包中循环引用的另一种情况:
functionbindEvent(){
varobj=document.createElement(‘div’);
obj.onclick=function(){
//Even if it’s a emptyfunction
};
}
一个构成闭包的函数对象中某元素绑定某事件,而该元素又是一个活动对象,就会产生一个循环引用。解决:将事件处理函数定义在外部,解除闭包。
(5) 不彻底的销毁对象:
a={p:{x:1}};
b=a.p;
deletea.p;
执行后,b.x依然为1。在销毁对象的时候,要遍历属性中所有后代属性,依次删除。
(6) 自动类型装箱转换
vars=”lalalal”;
alert(s.length);
这里s不是对象,js引擎会自动创建一个临时String对象封装s,而这个对象一定会泄漏。
(7) 某些DOM操作
如:IE中,向不在DOM树上的DOM元素appendChild
- JavaScript-内存泄漏问题
- JavaScript 中的内存泄漏问题
- Javascript 内存泄漏的问题
- javascript中的内存泄漏问题
- 解决javascript的内存泄漏问题
- JavaScript 中的内存泄漏
- JavaScript内存泄漏
- JavaScript内存泄漏检测工具
- JavaScript内存泄漏
- JavaScript内存泄漏
- javascript内存泄漏汇总
- JavaScript内存泄漏
- JavaScript内存泄漏
- JavaScript内存泄漏
- JavaScript内存泄漏
- javascript内存泄漏
- JavaScript内存泄漏
- JavaScript内存泄漏
- 使用C#代码为MongoDB添加2D索引
- Android--添加子视图(addView和setView)
- android图片处理方法
- linux系统最基本开发环境的搭建
- 2012年工作总结
- JavaScript-内存泄漏问题
- Android异常之 unable to write jarlist cache file
- iOS性能优化:Instruments使用实战
- Flex报错Error #2048: 安全沙箱冲突
- c# - Xml序列化, 类名冲突问题
- Selenium+Python 自动化测试模型
- nginx代理tomcat入门
- nuget使用问题收集
- 设置控件的随机显示位置 setlayoutparams