JavaScript 垃圾回收机制

本文介绍了JavaScript的两种主要垃圾回收机制:标记清除和引用计数,解释了它们的工作原理和潜在问题,如循环引用导致的内存泄漏。此外,文章讨论了如何减少JavaScript中的垃圾回收,包括对象、数组和函数的优化技巧,以降低内存占用和提高性能。
摘要由CSDN通过智能技术生成

目录

一、javascript垃圾回收机制

标记清除

引用计数

二、减少JavaScript中的垃圾回收

对象优化

数组优化

函数优化

高级技术 


一、javascript垃圾回收机制

解决内存的泄露,垃圾回收机制会定期(周期性)找出那些不再用到的内存(变量),然后释放其内存。

现在各大浏览器通常采用的垃圾回收机制有两种方法:标记清除,引用计数。

标记清除

js中最常用的垃圾回收方式就是标记清除。垃圾回收机制在运行的时候会给存储再内存中的所有变量都加上标记(可以是任何标记方式),然后,它会去掉处在环境中的变量及被环境中的变量引用的变量标记(闭包)。而在此之后剩下的带有标记的变量被视为准备删除的变量,原因是环境中的变量已经无法访问到这些变量了。最后垃圾回收机制到下一个周期运行时,将释放这些变量的内存,回收它们所占用的空间。

function test(){

var a = "world; //被标记"进入环境"

var b = "hello"; //被标记"进入环境"

}

test(); //执行完毕后之后,a和b又被标记"离开环境",被回收

工作原理

当变量进入环境时,将这个变量标记为“进入环境”。当变量离开环境时,则将其标记为“离开环境”。标记“离开环境”的就回收内存。

工作流程

  1. 垃圾回收器,在运行的时候会给存储在内存中的所有变量都加上标记;
  2. 去掉环境中的变量以及被环境中的变量引用的变量的标记;
  3. 被加上标记的会被视为准备删除的变量;
  4. 垃圾回收器完成内存清理工作,销毁那些带标记的值并回收他们所占用的内存空间。
  5. 到目前为止,IE、Firefox、Opera、Chrome、Safari的js实现使用的都是标记清除的垃圾回收策略或类似的策略,只不过垃圾收集的时间间隔互不相同。

引用计数

语言引擎有一张"引用表",保存了内存里面所有资源(通常是各种值)的引用次数。如果一个值的引用次数是0,就表示这个值不再用到了,因此可以将这块内存释放。

上图中,左下角的两个值,没有任何引用,所以可以释放。

如果一个值不再需要了,引用数却不为0,垃圾回收机制无法释放这块内存,从而导致内存泄漏。

工作原理:跟踪记录每个值被引用的次数。

工作流程

  1. 声明了一个
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值