js 垃圾回收机制

js有自动垃圾回收机制,垃圾是什么?

垃圾的本质是使用的内存,它们被定义为垃圾是因为本应该被清除的内容,现在还在占用着内存。

自动垃圾回收机制就是js能够自己去管理内存的回收。

现在关注的重点是如何实现这种机制的?怎么判断一个变量是否应该被回收

第一个方法标记清除(给变量打标记)

变量进入到执行环境就给他打上一个进入标签(标签的设置方式可以有很多种),当他离开之后就给他打上一个离开标志,那些被打上离开标志的变量占用的内存就会被回收。

第二个方法是引用计数

进入到一个执行环境中,只要一块内容被变量占用一次就给他计数值+1,这种计数方式在使用循环引用时会导致他们的计数值永远不会清零。所以后来浏览器都采用了标记清除的方式,但是dom/bom这类对象还是使用的是引用计数的方式,所以他还是有循环引用的危险,所以ie9将dom和bom都变成了真正的js对象

这个问题在闭包中最为常见,闭包会保存外部执行环境,那些被引用的内容计数值在不手动设定为null情况下将会永远的存在,很容易造成内存泄露

性能问题

什么时候运行垃圾回收器?ie设置的通过临界值(变量个数,数组的大小,字符串的长度),只要超过了这个临界值就会运行垃圾回收机制。

但是当一个脚本确实需要用到超过临界值的内存时,垃圾回收器的运作就是无效的。所以ie7重写了垃圾回收机制,在单次收集如果没有收集到分配内存的百分之15就加倍临界值,如果单次回收站到了内存的85%,就重置临界值

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值