js垃圾回收及内存泄漏

别等时光非礼了梦想. 提交于 2020-03-25 09:22:25

js垃圾回收

  • js能够自动回收申请却未使用的内存,由于每次清除需要的性能较大,不是时时在刷新,而是每隔一段时间才进行一次。
  • 回收的两种方式
    • 标记清除(常用) 在内存中先标记变量,然后清除那些那些进入环境或者引用的变量的标记,当进入环境退出环境,将被重新标记并被清除,释放出内存。
    • 引用计数 计算变量被引用的次数,引用次数为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
滑稽脸
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!