js垃圾回收机制

实现方式:

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. 概述 由于字符串、对象和数组没有固定大小,所有当他们的大小已知时,才能对他们进行动态的存储分配。JavaSc...
    Jony0114阅读 3,841评论 0 0
  • 一、浏览器内存泄漏 浏览器封装的V8引擎支持对JS进行解析,当程序运行(runtime)时,只要程序提出需要内存,...
    vinterx阅读 3,759评论 0 1
  • 一、内存垃圾回收的意义: 在不需要字符串、对象的时候,要释放其所占的内存,否则系统中的内存有限,占用太多会造成系统...
    钟钟353251阅读 3,483评论 0 1
  • JS的内存生命周期: 1、分配你所需要的内存 2、使用分配到的内存(读、写) 3、不需要时将其释放、归还 var ...
    grain先森阅读 4,470评论 0 19
  • JS的内存生命周期: 分配你所需要的内存 使用分配到的内存(读、写) 不需要时将其释放、归还 js垃圾回收机制: ...
    星星的成长之路阅读 4,908评论 2 18