JS 垃圾回收、内存泄漏

144 阅读1分钟

垃圾回收

垃圾回收机制

JS垃圾回收的机制:找出不再使用的变量,然后释放掉其占用的内存,但是这个过程不是时时的,是按照固定的时间间隔周期性的执行。

垃圾回收方法

  • 标记清除 判断标准是看这个对象是否可抵达,主要分为两个阶段:标记阶段、清除阶段

整个标记清除算法过程:

- 垃圾收集器在运行时会给内存中的所有变量都加上一个标记,假设内存中所有对象都是垃圾,全标记为0
- 然后从各个根对象开始遍历,把不是垃圾的节点改成1
- 清理所有标记为0的垃圾,销毁并回收它们所占用的内存空间
- 最后,把所有内存中对象标记修改为0,等待下一轮垃圾回收
  • 引用计数 它把对象是否不再需要简化定义为对象有没有其它对象引用到它,如果没有引用,对象将被垃圾回收机制回收。

内存泄漏

原因

由于代码写法不当,会让变量一直处于“进入环境”的状态,无法被回收,出现内存泄漏。

常见几种情况

  • 意外的全局变量 解决方法:使用严格模式。“use strict”

  • 闭包 闭包可以维持函数内局部变量,使其得不到释放。

解决方法:将事件处理函数定义在外部,解除闭包。或者在定义事件处理函数的外部函数中,删除对dom的引用。