JS中的垃圾回收机制

1.js中的内存管理
js具有自动的垃圾回收机制,也就是执行环境负责管理代码中使用的内存,在编写js时,不用像编写C语言那些需要手动跟踪内存的使用情况,而这种垃圾收集机制的原理很简单,就是定期找出不再使用的变量,然后释放其占用的内存,所以垃圾收集器就定期的执行这一操作。
2.局部变量的生命周期
js的局部变量只有当此函数执行的过程中存在,在执行的时候,会给当前变量在内存上分配相应的空间,用来存储他们的值,知道函数执行结束。此时局部变量就没有存在的意义,就可以释放其内存。
3.JS的几种垃圾收集方式
1.标记清除(这是JS种最常用的垃圾收集方式)
常用的标记状态有两种:
(1)进入环境:当变量进入环境时,就将这个变量标记为“进入环境”
(2)离开环境:当变量离开当前环境时,就标记为“离开环境”。

垃圾收集器在运行的时候会给存储在内存中的所有变量都加上标记。然后,它会去掉环境中的变量以及被环境中的变量引用的变量的标记。而在此之后再被加上的标记的变量将被视为准备删除的变量,原因是环境中的变量已经无法访问到这些变量了。最后,垃圾收集器完成内存清除工作。销毁那些带标记的值并回收它们所占用的内存空间。

2.引用计数(有瑕疵)
引用计数的原理是跟踪记录每个值被引用的次数,当声明一个变量并将一个引用类型值赋给该变量的时候,其次数为1,如果同个值又赋给其他变量,则次数加一,相反,如果此变量被赋值其他值,则次数减一,当引用次数为0,就没办法访问这个值,就将其内存空间回收,这样当垃圾回收器下次再运行,就会释放次数为0的值占用的内存。
严重问题:(循环引用)

function problem(){
    var obA=new Object();
    var obB=new Object();
    obA.A=obB;
    obB.B=obA;
}

这两个对象通过各自属性相互引用,所以其次数永远不为0,导致占用大量内存。
4.管理内存
因为系统分配给Web浏览器的内存数量被限制,防止因js耗尽全部内存导致系统崩溃,但是内存的限制影响了一个线程中同时运行语句的数量,所以要确保占用最少内存可以让页面获得更好性能。
而最好的方式,就是只保存必要数据,一旦数据不再用,就将其值赋为null来释放引用——这种做法叫做解除引用,这种做法适用于全局属性,因为局部属性在离开执行环境时自动被解除引用。如下:

function A(name){
    var localA=new Object();
    localA.name = name;
    return localA;
}
var B=A("AA");
//解除引用
B=null;

解除这个值的引用并不是自动回收其内存,而是让值脱离执行环境,让垃圾回收器下次运行时将其回收。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值