JavaSript有哪些垃圾回收机制

1038 篇文章 2 订阅
190 篇文章 0 订阅

在 JavaScript 社区,随着令人难以置信的框架和工具的混合,每周都会出现新的东西。人们希望旧工具将被新工具所取代。因此我们看到了流行框架交换的想法,以及纳入新诞生框架中的创新元素。所以下半年,你该选择哪个 JS 框架无关紧要,因为它们的功能大多是可以比较的。JavaSript有哪些垃圾回收机制?

标记清除( mark and sweep )

这是JavaScr i pt 最常见的垃圾回收方式。当变量进入执行环境的时候,比如在函数中声明一个变量,垃圾回收器将其标记为“进入环境” 。

当变量离开环境的时候(函数执行结束),将其标记为“离开环境”。

垃圾回收器会在运行的时候给存储在内存中的所有变量加上标记,然后去掉环境中的变量,以及被环境中变量所引用的变量(闭包)的标记。在完成这些之后仍然存在的标记就是要删除的变量。

引用计数( reference counting)

在低版本的IE 中经常会发生内存泄漏,很多时候就是因为它采用引用计数的方式进行垃圾回收。引用计数的策略是跟踪记录每个值被使用的次数。当声明了一个变量并将一个引用类型赋值给该变量的时候, 这个值的引用次数就加1 。如果该变量的值变成了另外一个,则这个值的引用次数就减1 。

当这个值的引用次数变为0 的时候,说明没有变量在使用,这个值没法被访问。因此, 可以将它占用的空间回收,这样垃圾回收器会在运行的时候清理引用次数为0 的值占用的空间。在IE中虽然JavaScript 对象通过标记清除的方式进行垃圾回收,但是BOM 与DOM 对象是用引用计数的方式回收垃圾的。也就是说, 只要涉及BOM 和DOM , 就会出现循环引用问题

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值