垃圾收集器必须跟踪哪个变量有用,哪个变量没用,对于不再有用的变量打上标记。
对标识无用变量的策略将会因实现而异,主要有标记清除和引用计数两种办法。
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;