关于JS的垃圾收集机制

读了JavaScript高级程序设计启发很多,从中了解了JS的垃圾收集机制

JS不同于C,C++等语言,他的垃圾回收机制不需要开发者专门去跟踪操作

他有两种垃圾收集方式:

1,引用计数:它的含义是标记每个值被引用的次数,当你声明了一个变量,并且给他赋值一个引用类型的数据,那么他的引用次数加1,这个值又赋值另外一个变量,那么他的引用次数再加一,相反,如果包含该引用的变量被赋值另外的值,那么他的引用次数减1,当引用次数为0的时候,他所占用的内存空间就会被收回,当垃圾收集器再次运行后,引用次数为0的内存将会被释放,但是他有一个严重的缺陷(循环引用):
function test(){
var objectA=new Objext();
var objectB=new Objext();
objectA.part=objectB;
objectB.part=objectA;
}
他们相互引用后,次数为2次,除非{objectA.part=null;objectB.part=null}这样手动改变赋值,否则该内存得不到释放,造成内存泄露。

2.标记清除:他是JS最常见的垃圾收集方式,当变量进入一个环境(函数中声明一个临时变量),就会把他标记成为:“进入环境”,当这个变量离开环境以后,标记为:“离开环境”,被标记"进入环境"中的变量是不能被释放的,相反释放的是标记为"离开环境"中的变量,这样就不存在循环引用的问题。

在IE9之前BOM与DOM对象使用的是C++以COM模型实现的,而C++垃圾收集就是引用计数,导致IE中只要涉及COM就存在
循环引用的问题,在IE9以后,BOM与DOM对象都转换成了真的JS对象,所以没有以上问题。

有的浏览器有自己的垃圾收集方法:在IE 中,调用 window.CollectGarbage()方法会立即执行垃圾收集。在 Opera 7 及更
高版本中,调用 window.opera.collect()也会启动垃圾收集例程,但是没必要,也不推荐。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值