博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JS基础夯实——垃圾回收机制
阅读量:4094 次
发布时间:2019-05-25

本文共 807 字,大约阅读时间需要 2 分钟。

JS 具有自动垃圾收集机制,执行环境会负责管理代码执行过程中使用的内存。

原理

找出那些不再继续使用的变量,然后释放其占用的内存。因此,垃圾收集器会按照固定的时间间隔周期性的执行这一操作。

垃圾收集器会跟踪哪个变量有用哪个变量没用,对于不再使用的变量打上标记,以备将来收回其占用的内存。通常有两个标记变量的方式:

(1)标记清除

这个也是最常用的标记方式。

当变量进入环境时(比如声明变量),将这个变量标记为“进入环境”;当变量离开环境时,则将其标记为“离开环境”。

垃圾收集器在运行的时候会给存储在内存中的所有变量都加上标记,然后去掉环境中的变量以及被环境中的变量引用的变量的标记。在此之后再被加上标记的变量将被视为准备删除的变量。最后垃圾收集器完成内存清除工作,销毁那些代表及的值并回收它们所占用的内存空间。

(2)引用计数

另一种不太常见的垃圾收集策略叫做引用计数,即跟踪记录每个值被引用的次数。当声明了一个变量并将一个引用类型值赋给该变量时,那么这个值的引用次数就是1。如果同一个值又被赋给另一个变量,则该值的引用加1;反之,如果包含对这个值引用的变量又取的了另一个值,则这个值的引用次数减1.当这个值的引用次数变成0时,则说明没有办法再访问这个值了,这样当垃圾收集器再次运行时,它就会释放那些引用次数为0的值所占的内存。

但是它有一个严重的问题:循环引用。比如对象A中包含一个指向对象B的指针,而对象B中也包含一个指向对象A的引用。示例如下:

在这里插入图片描述在这里插入图片描述

解除变量的引用

一旦数据不再使用,最好通过将其值设置为 null 来释放其引用,也就是解除引用。局部变量堆在他们离开执行环境时自动被解除引用。但全局变量在我们不适用它的时候要手动为它解除引用,示例如下:

在这里插入图片描述

解除变量的引用不仅有助于消除循环引用现象,而且对垃圾收集也有好处。为了确保有效地回收内存,应该及时解除不再使用的全局对象、全局对象属性即循环引用变量的引用。

转载地址:http://zlvii.baihongyu.com/

你可能感兴趣的文章
200页!分享珍藏很久的Python学习知识手册(附链接)
查看>>
程序员之神
查看>>
4 岁小女孩给 Linux 内核贡献提交
查看>>
推荐几个私藏很久的技术公众号给大家
查看>>
20 个 2020 年软件开发趋势预测
查看>>
王垠受邀面试阿里 P9,被 P10 面跪后网上怒发文,惨打 325 的 P10 赵海平回应了!...
查看>>
Python 趣味打怪:147 段简单代码助你从入门到大师
查看>>
卧槽!小姐姐用动画图解 Git 命令,这也太秀了吧?!
查看>>
厉害了!Python 编辑器界的神器 Jupyter ,推出官方可视化 Debug 工具!
查看>>
卧槽!Java 虚拟机竟然还有这些性能调优技巧...
查看>>
听说玩这些游戏能提升编程能力?
查看>>
7 年工作经验,面试官竟然还让我写算法题???
查看>>
被 Zoom 逼疯的歪果仁,造出了视频会议机器人,同事已笑疯丨开源
查看>>
上古语言从入门到精通:COBOL 教程登上 GitHub 热榜
查看>>
再见,Eclipse...
查看>>
超全汇总!B 站上有哪些值得学习的 AI 课程...
查看>>
如果你还不了解 RTC,那我强烈建议你看看这个!
查看>>
神器面世:让你快速在 iOS 设备上安装 Windows、Linux 等操作系统!
查看>>
沙雕程序员在无聊的时候,都搞出了哪些好玩的小玩意...
查看>>
太赞了!GitHub 标星 2.4k+,《可解释机器学习》中文版正式开放!
查看>>