js的垃圾回收机制

在js中局部变量只存在函数执行的过程中,在执行过程中,会为这些局部变量在栈或者堆上分配相应的空间储存它们的
值,当执行完毕后,这些局部变量便会备销毁,用来释放内存空间。而这一操作是由垃圾回收机制完成,垃圾回收机制
会跟踪那些变量有用,那些变量无用,然后对没有的变量进行销毁回收内存。全局变量会在页面关闭后进行销毁和回收
内存。垃圾回收机制的实现在浏览器中主要有两种实现方式
1、标记清除
    这一方式是js中最常用的垃圾回收方式。当变量进入某一环境时,会将这个变量标记为"进入环境",从理论上说只
要被标记为"进入环境"的变量是不会被销毁释放内存,因为在相应的执行的环境中,随时都会用到它。当函数执行完毕
后,变量会被标记会"离开环境"。
    垃圾回收机制会在运行的时候给内存中所有的变量加上标记,然后去掉那些在环境中的变量以及被环境中所引用的
变量的标记在这些操作完成后,仍然还有标记的变量便是要销毁的变量,回收这些变量的内存。
    大部分浏览器都是使用标记清除方式。
2、引用计数
    很简单,就是记录每个值被引用的次数,(也可以说是一共有多少个变量引用了这个值。)每当一个变量引用了这个
值,那么这个值的引用次数+1,一旦某个变量没有引用它了,这个值的引用次数-1;然后这一回收策略,容易造成内存
泄漏。原因,两个值被两个变量相互引用,上代码:
    function test(){
       var a = new Object();
       var b = new Object();
       a.prop = b;
       b.prop = a;
    }
    对象a有一个属性指向对象b,而对象b也有有一个属性指向对象a,这样相互引用下,a,b所指向的引用对象的引用次数为2,即使函数
执行完毕了,a,b引用的对象的引用次数依旧为2无法回收,但是使用标记清除可以回收。当这个函数被不断的调用时,
就会有大量的内存被占用,造成内存泄漏。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值