1. 垃圾回收机制的原理
1.找出不再使用的变量
2.释放其占用的内厝
3.垃圾回收是有固定的时间间隔运行
(垃圾回收机制是对内存当中存储的值进行处理)
—————————-分割线——————————-
函数内部的值在函数执行完毕以后就不存在了,例如
function test1(){var a = 1;function test2(){a++;console.log(a);}test2();}test1();//2test1();//2
闭包是一种特殊的情况
function test(){var a = 1;return function(){a++;console.log(a);}}var test1 = test();test1();//2test1();//3test1();//4test1 = null;//解除引用test1();//Uncaught TypeError: test1 is not a function
2. 垃圾回收的方式
1. 标记清除 mark and sweep
function test(){var a = 0; //被标记进入环境}test(); //a 离开环境
垃圾回收是排除掉AO环境内的和闭包的变量,然后清除掉离开环境的变量,垃圾回收机制在一个周期的时候,会完成内存清除,销毁带标记的值,并回收所占用的内存空间。
不同浏览器的标记方式可能不同,策略可能不同,垃圾回收的时间间隔也可能不同,但都是大同小异的。
2. 引用计数 reference counting
就是对引用值进行计数来进行垃圾回收(低版本的浏览器会使用,例如IE低版本)。
机制,例:
function test(){var a = new Object;// a = 1,引用次数默认等于1var b = new Object;// b = 1var c = a;//a++ = 2var c = b;//a-- = 1//特殊情况,循环引用a.prop = b;// b = 2//如果不解除这俩的引用,将永远会是2,则没办法进行垃圾回收,执行该函数次数越多,则引用次数会越来越大b.prop = a;// a = 2//低版本的IE,可以解除引用a = null;b = null;}
