浏览器的垃圾回收机制

一:堆和栈

1. 数据的存储方式
栈内存:线性有序存储,容量小,系统分配效率高。(存放原始类型)
堆内存:首先要在堆内存新分配存储区域,之后又要把指针存储到栈内存中,效率相对就要低一些了。 (存放引用类型的值)

2. 为什么一定要分“堆”和“栈”两个存储空间呢?所有数据直接存放在“栈”中不就可以了吗?
不可以的。这是因为JavaScript 引擎需要用栈来维护程序执行期间上下文的状态,如果栈空间大了话,所有的数据都存放在栈空间里面,那么会影响到上下文切换的效率,进而又影响到整个程序的执行效率。

3. 垃圾回收器
因为数据是存储在栈和堆两种内存空间中的,所以浏览器的垃圾回收机制根据数据的存储方式分为 “栈垃圾回收” 和 “堆垃圾回收”。

二:栈垃圾回收

当一个函数执行结束之后,JS引擎通过向下移动ESP指针(记录调用栈当前执行状态的指针),来销毁该函数保存在栈中的执行上下文(变量环境、词法环境、this、outer),遵循先进后出的原则。

三:堆垃圾回收

当函数执行结束,栈空间处理完成了,但是堆空间的数据虽然没有被引用,但还是存储在堆空间中,需要垃圾回收器将堆空间中的垃圾数据回收。

简单介绍两个最常见的垃圾回收:标记清除算法

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值