0、背景
目前在公司某系统发现在XP环境下IE8的系统下进行长时间运行会产生大量垃圾未被回收,用内存分析工具进行分析了Jprofiler,发现了IE8的BUG,进行了DEMO测试,借鉴了网上诸多解决方案,总结诸家论点最终产生的解决方案,感谢各界大佬!
1、问题分析
1、IE
在 iframe
元素的回收方面存在着 bug
,在通常情况下应该将该元素的src属性值修改为”abort:blank”
,并手工将其从 DOM
树上移除,然后把脚本中引用它的变量置空并调用 CollectGarbage()
就可以避免 iframe
不能正常回收所造成的内存泄露。
2、在IE8中,生成特定 DOM
节点所占用的内存是不会被释放的,即使这些节点被删除内存也不会被释放。内存泄露的节点类型包括:form、button、input、select、textarea、a、img
等。
2、Javascript 的垃圾回收机制
Javascript具有自动垃圾回收机制(GC:Garbage Collecation),也就是说,执行环境会负责管理代码执行过程中使用的内存。
原理:垃圾收集器会定期(周期性)找出那些不在继续使用的变量,然后释放其内存。
JavaScript垃圾回收的机制很简单:找出不再使用的变量,然后释放掉其占用的内存,但是这个过程不是实时的,因为其开销比较大,所以垃圾回收器会按照固定的时间间隔周期性的执行。
不再使用的变量也就是生命周期结束的变量,当然只可