原理
JavaScript 垃圾收集机制的原理其实很简单,就是周期性找出那些不再继续使用的变量,然后释放其占用的内存。为此垃圾收集会按照规定的时间间隔(或代码执行中预付的收集时间),周期性地执行这一操作。
标记清除
定义
- 标记清除:当变量进入与出入执行环境时,会给变量做上标记(可以用任何方式标记),将离开执行环境的变量清除。
2.引用计数:当一个引用类型值赋给变量时,这个值的次数是1,当同一个值又赋给另一个变量时,这个值的次数+1。当引用了这个引用类型值的变量转去引用了其他值,那么这个引用类型值的次数-1。如果这个引用类型值的次数为0,说明这个值已经无法访问到了,就会被清除掉。
function fn1() {
var obj = {name: 'hanzichi', age: 10};
}
function fn2() {
var obj = {name:'hanzichi', age: 10};
return obj;
}
var a = fn1();
var b = fn2();
当fn1调用时就会开辟一个新内存存放{name: 'hanzichi', age: 10} 出了这个fn1 这块内存就会被JS引擎中垃圾回收器给自动释放了
在 fn2 被调用的过程中,返回的对象被全局变量 b 所指向,所以该块内存并不会被释放。
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
//