关于内存泄漏

垃圾回收机制

  首先我们要知道js的垃圾回收机制,就是找出不用的变量,释放掉其占用的内存。垃圾回收机制会按照固定的时间间隔周期性的执行。判断哪个变量没用有两个方法:标记清除和引用计数

标记清除

  当变量进入环境时,例如,在函数中声明一个变量,就将这个变量标记为“进入环境”。从逻辑上讲,永远不能释放进入环境的变量所占用的内存,因为只要执行流进入相应的环境,就可能会用到它们。而当变量离开环境时,则将其标记为“离开环境”。
1 function test(){
2    var a=10;    //被标记,进入环境
3   var b=20;    //被标记,进入环境
4 }
5 test();         //执行完毕之后a、b又被标记离开环境,被回收
 

引用计数

  引用计数的含义是跟踪记录每个值被引用的次数。当声明了一个变量并将一个引用类型值赋给该变量时,则这个值的引用次数就是1。相反,如果包含对这个值引用的变量又取得了另外一个值,则这个值的引用次数减1。当这个值的引用次数变成0时,则说明没有办法再访问这个值了,因而就可以将其占用的内存空间回收回来。这样,当垃圾回收器下次再运行时,它就会释放那些引用次数为0的值所占用的内存。
1 function test(){
2   var a={};  //a的引用次数为0
3   var b=a;   //a的引用次数加1,为1
4   var c=a;   //a的引用次数加1,为2
5    var b={};  //a的引用次数减1,为1
6 }

哪些操作会造成内存泄漏?

1、意外的全局变量引起的内存泄漏(定义在函数的全局变量)
2、闭包引起(闭包可以维持函数内部的局部变量,使其不得释放)
3、没有清理的DOM元素引用
4、被遗忘的定时器或者回调

   参考自:https://blog.csdn.net/michael8512/article/details/77888000

原文地址:https://www.cnblogs.com/aizz/p/9329691.html