前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JavaScript垃圾回收策略

JavaScript垃圾回收策略

作者头像
青年码农
发布2021-04-29 14:25:13
4990
发布2021-04-29 14:25:13
举报
文章被收录于专栏:青年码农青年码农

前段时间,面了不少公司,不少面试官都会问到JavaScript垃圾回收。说实话,平时还真的了解不多,最近正在看“JavaScript高级程序设计”,从头把基础再巩固下。

JavaScript 是使用垃圾回收的语言,通过自动内存管理实现内存分配和闲置资源回收。基本思路很简单:垃圾收集器会按照固定的时间间隔或代码执行中预定的收集时间,周期性地执行操作--找出不再继续使用的变量,然后释放其占用的内存。如何找出不再继续使用的变量,浏览器发展怎么多年,出现了几种不同的实现方案,标记清理和引用计数。今天简单说说 JavaScript 最常用的垃圾回收策略 -【标记清理】。

标记清理

标记清理(mark-and-sweep)。当变量进入上下文,比如在函数内部声明一个变量时,

代码语言:javascript
复制
let a = 1

这个变量会被加上存在于上下文中的标记。而在上下文中的变量,逻辑上讲,永远不应该释放它们的内存,因为只要上下文中的代码在运行,就有可能用到它们。当变量离开上下文时,也会被加上离开上下文的标记。

我们可以手动释放:

代码语言:javascript
复制
let a = 1
// 释放
a = null

给变量加标记的方式有很多种。比如,当变量进入上下文时,反转某一位;或者可以维护“在上下文中”和“不在上下文中”两个变量列表,可以把变量从一个列表转移到另一个列表。标记过程的实现并不重要,关键是策略。垃圾回收程序运行的时候,会标记内存中存储的所有变量(记住,标记方法有很多种)。然后,它会将所有在上下文中的变量,以及被在上下文中的变量引用的变量的标记去掉。在此之后再被加上标记的变量就是待删除的了,原因是任何在上下文中的变量都访问不到它们了。随后垃圾回收程序做一次内存清理,销毁带标记的所有值并收回它们的内存。

还有种不太常用的垃圾回收策略-引用计数(reference counting)。引用计数的含义是跟踪记录每个值被引用的次数。由于不太常用,我们这里就不多介绍。

上面的内容,基本可以在“JavaScript高级程序设计”找到,感兴趣的可以读一读这本书,收获还是蛮大的,之后有时间,我会把书中的知识点整理,总结在公众号中,现在已经整理了一部分,后期会不定时更新。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-04-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 青年码农 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档