js垃圾收集
我们在写js的时候,不需要过多关心内存的使用,英文js的垃圾收集机制可以实现内存回收的自动管理。
垃圾回收机制的原理:按照固定的时间周期,找出代码执行中不再使用的变量,释放其内存。
垃圾收集器需要跟踪哪些变量有用,哪些没用,有两种方法:
- 标记清除:当变量进入与出入执行环境时,会给变量做上标记(可以用任何方式标记),将离开执行环境的变量清除。
2.引用计数:当一个引用类型值赋给变量时,这个值的次数是1,当同一个值又赋给另一个变量时,这个值的次数+1。当引用了这个引用类型值的变量转去引用了其他值,那么这个引用类型值的次数-1。如果这个引用类型值的次数为0,说明这个值已经无法访问到了,就会被清除掉。
引用计数的问题:循环引用。循环引用就是对象A中包含一个指向对象B的指针,对象B中包含一个指向对象A的指针。这样值的次数都是2,并且无法清除。
如下:
var objA=new Object(); var objB=new Object(); objA.otherObj=objB; objB.otherObj=objA;
这样垃圾回收机制无法清除他们,内存无法释放,但是可以手动解决
var objA=new Object(); var objB=new Object(); objA.otherObj=objB; objB.otherObj=objA; .... //当objA,objB没有用时 objA.otherObj=null; objB.otherObj=null;