GC 策略及 IE 性能的学习笔记
阅读《JavaScript高级程序设计(第2版)》第4章学习到的,记下:
JS的GC策略有两种:
- 标记清除
- 引用计数
现在,主流浏览器都用的是第1种。IE不是全部采用第1种,它采用了两种GC策略,在BOM和DOM中的对象采用了第2种。
在引用计数策略中有个称为“循环引用(circular reference)”的严重问题。
下面是循环引用问题代码示例:
var elm=document.getElementById('xxx'); var obj={}; obj.elm=elm; elm.obj=obj;
就是对象A的属性引用了对象B,B的属性也引用了对象A。这样就会造成对象相互循环引用,不会被GC回收处理掉。
IE6的另一个问题是性能问题。是因为它的GC处理的问题:IE6有个分配量的临界值,到了那个值GC就不停的运行,问题是那些对象仍然在执行环境中。