关于IE下的内存回收研究.
有很多人提到IE下使用AJAX内存会增长很快.
我稍微研究了一下 发现其实IE的并不会主动的对未引用的变量进行回收
CollectGarbage()只是对值为null的变量进行回收,其实就算不用CollectGarbage()在下次分配内存的时候IE也会对null的内存进行重新分配.
例如一个有类 class1
function class1()
{
this.a = "xxxx ";
this.b = "xxxx ";
this.c = "xxxx ";
this.d = "xxxx ";
}
var aa = new class1();
aa = null;
这样被释放的内存也只有aa这个变量.
class1的实例的所有成员的内存完全没有被释放,这些内存将在IE最小化的时候才会被废弃.
也就是说我们需要手动的对这些内存进行释放.
var aa = new class1();
for(o in aa)aa[o]=null;
aa = null;
这样就可以完全把class1的内存释放掉
但如果class1里面还有一个类的实例
function class1()
{
this.a = "xxxx ";
this.b = "xxxx ";
this.c = "xxxx ";
this.d = new class2();
}
function class2()
{
this.a = "xxxx ";
this.b = "xxxx ";
this.c = "xxxx ";
this.d = "xxxx ";
}
var aa = new class1();
for(o in aa)aa[o]=null;
aa = null;
同理这样释放内存的话 class1里面的class2的内存就没有被释放
至于怎么释放我就不多说了
对于document.createElement()方法
其实就相当于是一个新的DHTMLElement实例 稍微估算了一下一般是8K一个
以下是重点
IE在移除一个HTML元素时 只是对所有属性进行了回收 而所有的事件完全没有被回收
而这些事件方法往往是内存占用的大鳄.通常导致DHTML元素8K的内存完全没有被回收
例如:
function class1()
{
this.a = "xxxx ";
this.b = "xxxx ";
this.c = "xxxx ";
this.d = "xxxx ";
this.e = document.createElement( "div ");
this.e.onclick = function(){.....;}
this.e.ondblclick = function(){.....;}
}
var aa = new class1();
for(o in aa)aa[o]=null;
aa = null;
这样的话就平白无故的多了8K无法回收的内存
对于上面的情况我们需要这样 才能回收
var aa = new class1();
aa.e.onclick = null;
aa.e.ondblclick = null;
for(o in aa)aa[o]=null;
aa = null;
当然也有个通用的回收方法 效率很低而已
var aa = new class1();
for(o in aa.e)
if(o.indexOf( "on ")==0)
aa.e[o]=null;
for(o in aa)
aa[o]=null;
aa = null;
总结以上 IE的内存不会被自动回收 但不是不能被回收
怎么回收 那就要靠你自己动手来写了
[解决办法]
5-1,还搞研究,佩服,我只接分
[解决办法]
mark
[解决办法]
mark
[解决办法]
受教ed
[解决办法]
mark...
[解决办法]
俺 5.1 写了CMS系统的好几个模块...
唉...
[解决办法]
学习
[解决办法]
呃..原来是教学贴..接分接分。.
[解决办法]
IE下一般情况下是由于循环引用或者闭包才会有memory leak。
我想问一下,楼主用什么软件测试内存使用量,是否精确和值得信任?发出来给我也来测一下
:D, thanks
[解决办法]
关注加学习。其实以前还真没注意这方面的问题。一直感觉反正是JS是客户端的,除非如楼上所说的,才会有问题。
不过还是佩服楼主这种精神的。
[解决办法]
innerHTML和innerText每用一次也会让内存占用量递增
[解决办法]
我想知道lz是怎么测试出来的
[解决办法]
var aa = new class1();
aa.e.onclick = null;
aa.e.ondblclick = null;
for(o in aa)aa[o]=null;
aa = null;
请问那8K是怎么回收的?
是不是所有的属性都为null了,事件就会被回收呢?
[解决办法]
支持并关注一下....
[解决办法]
mark
[解决办法]
此帖值得关注.....
拱,期待大师出手
[解决办法]
mark
[解决办法]
不错,学习!
[解决办法]
关注中。。。。。。。
[解决办法]
mark