IE,Firefox内存溢出?4种可能的原因及解决方法!另附检测工具!

Monday, November 15, 2010 吉光片羽 2

听说 JavaScript 是一种垃圾收集式语言,也就是说,内存是根据对象的创建分配给该对象的,并会在没有对该对象的引用时由浏览器收回。JavaScript 的垃圾收集机制本身并没有问题,但浏览器在为 DOM 对象分配和恢复内存的方式上却有些出入。IE 和 Firefox 均使用引用计数来为 DOM 对象处理内存。在引用计数系统,每个所引用的对象都会保留一个计数,以获悉有多少对象正在引用它。如果计数为零,该对象就会被销毁,其占用的内存也会返回 给堆。虽然这种解决方案总的来说还算有效,但在循环引用方面却存在一些盲点。

原因

1、循环引用导致了内存泄漏
HTML :\ Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行 运行此代码

2、由外部函数调用引起的内存泄漏
HTML :\ Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行 运行此代码

3)、闭包引起的内存泄漏

function parentFunction(paramA){
var a = paramA;
function childFunction(){
return a + 2;
}
return childFunction();
}


4、由事件处理引起的内存泄漏模式
HTML :\ Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行 运行此代码

解决方法

1、打破循环引用
HTML :\ Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行 运行此代码

2、添加另一个闭包
HTML :\ Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行 运行此代码

3、避免闭包自身
HTML :\ Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行 运行此代码

4、考虑用CollectGarbage()

jcl.MemFree = function(Mem){
Mem = null;
CollectGarbage();
};


下面附上实用的IE,Firefox内存溢出检测软件
sIEve: 他是基于 IE 的内存泄露检测工具,需要下载运行,下载地址:http://home.wanadoo.nl/jsrosman/
Leak Monitor: 他是基于 Firefox 的内存泄露检测工具,下载地址:https://addons.mozilla.org/firefox/2490/ 或者直接在浏览器的 工具/附加组件 里搜索 Leak Monitor

引自 吉光片羽的使用心得
sIEve 是英文界面,不太会用,而且遇到大的内存溢出,会直接崩溃关闭 - -b
Leak Monitor 是繁体版,会提示具体溢出的节点,但是目前还没看明白怎么利用……

点击这里获取该日志的TrackBack引用地址

日志标签: IE  Firefox  JS  代码  内存  溢出  优化  分享  

已有人对此文发表了评论

  1. 引用该评论 吉光片羽 11/17/2010 5:45:54 PM 回复
    我现在正被这问题郁闷着呢,如果解决不了,就只能换笨办法了。。。
  2. 引用该评论 卢松松 11/17/2010 4:08:31 PM 回复
    目前我还没遇到过这种问题!

发表评论:

邮箱网址为选填;若您注册了GRAVATAR,请填写邮箱(不会公开),否则最好不填,您可在提交评论前选择表情头像;点击他人头像可引用其评论。插入UBB

About me

Name: KandyTang
Age: 30-
Location: Guilin, China
QQ: 121885959
Email: KandyT@qq.com

My Works

中文酷博聚合 汽车手绘·视频·教程 史努比(中文)网 免费的PJBlog皮肤 淘宝创意导购 桂林{摄影}品牌

Gallery

Unnamed Album

Unnam... (4)

复线文字LOGO设计

复线文字L... (10)

订书钉的创意-微型城市

订书钉的创... (4)

2010元宵烟火

2010元宵烟火 (7)

国外贺卡设计欣赏

国外贺卡设计欣赏 (20)