垃圾收集器必须跟踪哪个变量有用,哪个变量没用,对于不再有用的变量打上标记。

对标识无用变量的策略将会因实现而异,主要有标记清除和引用计数两种办法。

1、标记清除:使用”进入环境变量列表“和”离开环境变量列表“。对进入环境的变量标记,对离开环境的变量也进行标记。IE、FireFox、Opera、Chrome和Safari浏览器使用变量标记方式。

2、引用计数。增加一次引用+1,引用改变或该值被赋予另一个变量,则引用次数-1。当引用计数为0时,收回变量。

BOM对象和DOM对象会存在循环引用问题,需要在最后给引用赋值为null。

 

IE采用临界值的办法确定何时进行垃圾收集。具体点说就是256个变量,4096个对象或数组,64KB的字符串。

达到上述中任何一个,就启动垃圾收集。

但是如果一个脚本中就保有为数如此多的变量,那么垃圾收集器就不停运行,造成麻烦。

IE7中进行动态临界值的更改。

 在IE中,调用wondow.CollectGarbage()方法可以启动垃圾收集,在Opera7以及更高版本中,window.opera.collect()也会启动垃圾收集。

 

局部变量自动解除引用,全局变量手动解除引用:

function createPerson(name){

var localPerson=new Object();

localPerson.name=name;

return localPerson;        //局部变量自动解除引用

}

var globalPerson=createPerson("Nicholas");

globalPerson=null;

posted on 2012-01-19 15:56  Ballad1939  阅读(158)  评论(0编辑  收藏  举报