浅谈浏览器垃圾回收机制

2020-04-07 15:20发布

javaScriipt 使用垃圾回收机制来自动管理内存

js 的回收机制目前分为两种方式:1.标记清除(各大浏览器主流算法)2.引用技术

  一: 标记清除

    这种算法的思想是给当前不使用的值加上标记,然后再回收其内存

    算法流程:

      1.浏览器再运行的时候会给存储再内存中的所有变量都加上标记

      2.去掉环境中的变量以及被环境中引用的变量的标记

      3.如果还有变量有标记,就会被视为准备删除的变量

      4.垃圾回收机制完成内存的清除工作,销毁那些带标记的变量,并回收他们所占用的内存空间

  二:引用计数

    这种算法的思想是跟踪记录所有值被引用的次数。javaScript 引擎目前都不再使用这种算法,但再IE 中访问非原生JavaScriopt 对象(如DOM元素)时,这种算法任然可能会导致问题

    当代码中存在循环引用现象时,引用计数算法就会导致问题

    解除变量的引用不仅可以帮于消除循环引用现象(一个变量使用完之后赋值为null),而且对垃圾收集也有好处。为了确保有效的回收内存,应该及时解除不再使用的全局对象、全局对象属性以及循环引用变量的引用

    算法流程:

      1.声明了一个变量并将一个引用类型的值赋值给这个变量,这个引用类型值引用次数就是1

      2.同一个值又被赋值另一个变量,这个引用类型的值引用次数加1

      3.当包含这个引用类型值得变量又被赋值另一个值了,那么这个引用类型的值的引用次数减一

      4.当引用次数变成0时, 说明这个值需要解除引用

      5.当垃圾回收机制下次运行时,它就会释放引用次数为0 的值所占用的内存