实现方式:
1.标记清除
当变量进入环境时标记为 进入环境,离开环境时标记为 离开环境。正在被使用的变量不能回收也就是被标记为进入环境的产量。标记为 离开环境的变量可被回收。
function fn(){
//函数执行 a b被标记为进入环境
let a = 10;
let b = 10;
}
fn();// 函数执行结束,ab被标记为离开环境,被回收。
2.引用计数
统计引用变量申明后被引用的次数,当次数为0时,变量被回收。
function fn2(){
let c = {};
let d = c;// c被d引用 c的计数为1
let e = c;// c被e引用 c的计数为2
d = null;// d不再引用c c的计数减为1
e = {};// e不再引用c c的计数减为0 将被回收
}
注意:循环引用需要手动清除
function fn2(){
let a = {};
let b = {};
a.grop = b;
b.group = a;
//a 和 b的互相引用,导致计数不能为0。
}
fn2();
a.grop = null; b.group = null;
手动设置。
内存泄露:
1.全局变量照成内存泄露。
2.未销毁的定时器和回调函数。
3.闭包
4.DOM引用
网友评论