垃圾回收机制和内存的生命周期

JS环境中的内存分配包括变量、函数、对象的声明和使用。内存回收主要依赖于垃圾回收器,全局变量通常在关闭页面时回收,局部变量在不再使用后自动回收。引用计数法是一种早期的回收策略,但存在循环引用导致的内存泄漏问题。标记清除法是更现代的方法,通过判断对象是否可达来决定是否回收。
摘要由CSDN通过智能技术生成

JS环境中分配的内存,一般有如下生命周期:

1. 内存分配:当我们声明变量、函数、对象的时候,系统会自动为他们分配内存

2. 内存使用:即读写内存,也就是使用变量、函数等

3. 内存回收: 使用完毕,由垃圾回收器自动回收不再使用的内存

说明:

- 全局变量一般不会回收(关闭页面回收)

- 一般情况下局部变量的值,不用了,会被自动回收掉

内存泄漏:程序中分配的内存由于某种原因程序未释放或无法释放叫做内存泄漏

下面介绍两种常见的浏览器垃圾回收算法:

[引用计数法]

引用计数

IE采用的引用计数算法,定义“内存不再使用”,就是看一个对象是否有指向它的引用,没有引用了就回收对象

算法:

跟踪记录被引用的次数

如果被引用了一次,那么就记录次数1,多次引用会累加

如果减少一个引用就减1

如果引用次数是0,则释放内存

经典错误:

但它却存在一个致命的问题,嵌套引用 (循环引用)如果两个对象相互引用,尽管他们已不再使用,垃圾回收器也不会进行回收,导致内存泄露。

[标记清除法]

标记清除算法将不再使用的对象定义为无法达到的对象。

凡是不能从根部到达的对象,都是不需要使用的,垃圾回收机制就把他们的内存释放。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值