浏览器垃圾回收机制:“内存释放机制”

2023-11-19 15:10:06 浏览数 (1)

标记清除「谷歌」

引用计数(老版本火狐和IE)

    堆内存释放机制

  •  如果当前堆内存的16进制地址被其他事物引用,则堆内存不能释放掉 强引用
  •  如果没有东西占用这个堆内存,浏览器在空闲的时候,会把这些未被引用的堆内存“回收/释放”掉
代码语言:javascript复制
let obj = {
    name:"zhufeng"
};
obj = null;//让obj不指向对象的堆内存,这样上述对象就可以被释放掉了{手动释放堆内存的方法:赋值为null}

栈内存(执行上下文)释放机制

  • 全局上下文是加载页面的时候产生的,也只有关闭页面的时候才释放。
  • 私有上下文(不论是函数/块),一般情况,执行完都会释放掉,以此来优化栈内存;但是有特殊情况,如果当前上下文中,创建的某个东西(一般指一个对象{堆内存}),被上下文以外的其他事物占用了,那么不仅创建的这个东西不能被释放,和其有关联的这个私有上下文也不能释放!!

              消耗内存(慎用);

             因为不被释放,所以这个私有上下文中的东西都被保留下来,以后可以拿来用。

闭包机制:

 函数执行会产生一个全新的私有上下文。

  • 保护:保护里面的私有变量不受外界的干扰,防止全局变量污染;
  • 保存:一旦这个上下文不被释放,里面的私有变量和值,就保存起来了,可以供其“下级”上下文中调取使用。

我们把函数执行产生的两大机制“保存/保护”,称之为闭包机制!!

image.pngimage.png

词法分析

@1 我们从服务器端获取到的JS代码,本质就是一堆字符串,而浏览器会把这堆字符串,按照ECMA262规范,解析为自己可以识别的代码...我们把这个过程称之为“词法分析/解析”

@2 词法分析阶段,会把这堆代码变为浏览器可以识别的“树形结构 ==> AST语法树”

我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

0 人点赞