面试官:说一说浏览器的垃圾回收机制吧

本文介绍了浏览器中的垃圾数据及其回收的重要性,详细阐述了垃圾回收机制的原理,包括不同语言的回收策略、栈和堆中数据的回收方式。重点讨论了JavaScript的垃圾回收,特别是新生代和老生代的区分,以及Scavenge和Mark-Sweep算法的应用,同时提到了全停顿现象及增量标记算法以减少性能影响。
摘要由CSDN通过智能技术生成

垃圾数据 :

有些数据被使用之后,可能就不再需要了,我们把这种数据称为垃圾数据

为什么要做垃圾回收:

数据一直保存在内存中,那么内存会越用越多,所以我们需要对这些垃圾数据进行回收,以释放有限的内存空间。

垃圾回收机制的原理:

一、不同语言的垃圾回收策略

通常情况下,垃圾数据回收分为手动回收和自动回收两种策略。

eg:C/C++ 就是使用手动回收策略,何时分配内存、何时销毁内存都是由代码控制的

JavaScript、Java、Python 等语言产生的垃圾数据是由垃圾回收器来释放的,并不需要手动通过代码来释放

因为数据是存储在栈和堆两种内存空间中(原始数据类型是存储在栈空间中的,引用类型的数据是存储在堆空间中的)的,所以接下来我们就来分别介绍“栈中的垃圾数据”和“堆中的垃圾数据”是如何回收的。

二、栈中的数据是如何回收的

在这里插入图片描述

当执行到第 6 行代码时,其调用栈和堆空间状态图如下所示:

在这里插入图片描述
原始类型的数据被分配到栈中,引用类型的数据会被分配到堆中。当 foo 函数执行结束之后,foo 函数的执行上下文会从堆中被销毁掉,那么它是怎么被销毁的呢?下面我们就来分析一下。

如果执行到 showName 函数时,那么 JavaScript 引擎会创建 showName 函数的执行上下文,并将 showName 函数的执行上下文压入到调用栈中,最终执行到 showName 函数时,其调用栈就如上图所示。与此同时,还有一个记录当前执行状态的指针(称为 ESP),指向调用栈中 showName 函数的执行上下文,表示当前正在执行 showName 函数。

接着,当 sho

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值