垃圾回收机制和内存泄漏

js垃圾回收

  • js能够自动回收申请却未使用的内存,由于每次清除需要的性能较大,不是时时在刷新,而是每隔一段时间才进行一次。
  • 回收的两种方式

1.标记清除(常用) 在内存中先标记变量,然后清除那些那些进入环境或者引用的变量的标记,当进入环境退出环境,将被重新标记并被清除,释放出内存。

2.引用计数 计算变量被引用的次数,引用次数为0将被清除释放内存。 缺点:

无法清除那些引用次数不为0,但又不需要的内存

 let arr = [1,2,3];
   console.log('ok');
   //数组[1,2,3]引用次数为1,但是又没用到就会一直占着内存
   //解决方式:arr.length=0


无法解决循环引用的问题

    function fn(){
        let obj1 = {};
        let obj2 = {};
        obj1.a = obj2;
        obj2.b = obj1;
    }
    //解决方法:手动释放 obj1 = null obj2 = null

内存泄漏

  • 某些情况无法释放内存,变量一直处于环境中
  • 出现内存泄漏的一些情况
最常见的就是闭包了

闭包会创建一个不会被销毁的栈内存。
不经意的全局变量

    function fn(){
        obj = {};//没用声明关键字,相当于创建了一个全局变量
    }


计时器没有被清除

    setInterval()
    setTimeout()
    //解决方法
    清除对应定时器的id
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值