JS的垃圾回收机制

JavaScript的内存管理是自动的,基于可达性原则。根节点包括全局变量、局部变量等。当一个对象无法从根节点访问时,就会被视为垃圾,进行垃圾回收。‘标记-清除’是常见的垃圾回收策略,通过遍历根节点及其引用,标记可达对象,未被标记的对象则会被清理。这一过程确保了内存的有效利用,防止内存泄漏。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

垃圾回收
    js中的内存管理是自动执行的,而且是不可见的。我们创建基本类型,对象,函数等这些都需要内存。
在这里插入图片描述

js内存管理-可达性

    js中内存管理的主要概念是可达性。“可达性”值就是那些以某种方式可访问或可用的值,它们被保证存储在内存中。

1.一组基本的固有可达值,这些可达值不可删除

  • 本地函数的局部变量和参数

  • 当前嵌套调用链上的其他函数的变量和参数

  • 全局变量

  • 还有一些其他的,内部的。
    这些值称之为根
    2.如果引用或引用链可以从根访问任何其他值,则认为该值是可访问的。
        如果局部变量中有对象,并且该对象具有引用另一个对象的属性,则该对象被视为可达性,它引用的那些也是可以访问的。

    一个对象的引用在这里插入图片描述
    在这里插入图片描述
    箭头标识一个对象的引用,全局变量oneStudent引用对象{name:’'tom},可以同个oneStudent.name访问到该对象中tom的数据,此为可达性。
    对全局变量oneStudent进行覆盖
    在这里插入图片描述
    在这里插入图片描述
    此时oneStudent指向的是null,对象{name:‘tom’}不能通过任何方式到达该对象,没有对该对象的引用,垃圾回收器将丢弃该对象的内容并且释放内存。

两个引用
在这里插入图片描述

可以通过引用otherStudent.name或者引用oneStudent.name获得tom的数据,此时将对象{name:‘tom’}的地址赋值给了otherStudent
在这里插入图片描述
对oneStudent进行覆盖
在这里插入图片描述
在这里插入图片描述
此时虽然我们不能通过oneStudent或者tom的数据,但是我们可以引用otherStudent得到tom的数据,所以对象{name:‘tom’}也在内存中,如果我们对otherStudent内容进行覆盖,那么对象{name:‘tom’}的内存将被释放

总之
   如果不能通过任何方式引用该对象,得到该对象的数据,那么该对象的内存将被释放。

垃圾回收方法之“标记-清除”
垃圾回收的步骤如下
* 垃圾回收器获取根并“标记”所有来自它们的引用。
* 然后根据它们访问所有来自它们的引用
* 然后它访问标记的对象并且标记它们的引用。多有被访问的对象都被记住,以便以后不在访问同一个对象两次。
* 以此类推,直到有未访问的引用(可以从根访问)为止
* 除标记的对象外,所有未被标记的对象都会被清除

首先
在这里插入图片描述
第一步
在这里插入图片描述
第二步
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值