js垃圾收集

我们在写js的时候,不需要过多关心内存的使用,英文js的垃圾收集机制可以实现内存回收的自动管理。

垃圾回收机制的原理:按照固定的时间周期,找出代码执行中不再使用的变量,释放其内存。

垃圾收集器需要跟踪哪些变量有用,哪些没用,有两种方法:

  1. 标记清除:当变量进入与出入执行环境时,会给变量做上标记(可以用任何方式标记),将离开执行环境的变量清除。

         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;

 

posted @ 2019-07-30 20:32  ellenxx  阅读(259)  评论(0编辑  收藏  举报