js垃圾回收机制

2020-01-13  本文已影响0人  冇得感情

实现方式:

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引用

上一篇下一篇

猜你喜欢

热点阅读