Node.js 进阶:V8 垃圾回收机制全解析

V8 使用垃圾回收器管理堆内存,它会从堆上找到那些活动的对象将其打上标记,也就是还有直接或间接引用的对象,把那些未被引用的对象给清除掉,从而为后续分配新对象提供更多的空间。

GC 如何识别不活动对象

垃圾回收器首要解决的问题是如何识别出哪些对象是不活动的,从而标记为可回收。根对象被定义为是活动的,我们通常称呼这个根对象为 "GC 根"。在应用程序中定义的全局变量属于根对象,这些全局对象始终可被访问。例如,Node.js 中的全局对象 globalThis、浏览器中的 Window 及定义在文件顶部的全局变量,这些都

会被视为根对象,被这些根对象指向的局部变量也是不会被垃圾回收器释放的。

下面通过一个简单示例,来看看定义在文件顶部的全局变量,当经历 GC 后是何时会被标记为可回收。如下代码所示:

go 复制代码
let user1 = { name: 'Tom' };
let user2 = { name: 'Jack' };
// 1. 第一次 GC 运行
// do something...
user2 = null
// 2. 第二次 GC 运行

第一次 GC 运行后,根对象持有全局变量 user1、user2 两个变量的引用,不会被垃圾回收。

相关推荐
bjzhang7511 分钟前
Depcheck——专门用于检测 JavaScript 和 Node.js 项目中未使用依赖项的工具
javascript·node.js·depcheck
你不讲 wood4 小时前
使用 Axios 上传大文件分片上传
开发语言·前端·javascript·node.js·html·html5
tryCbest5 小时前
Nodejs安装配置及创建vue项目
vue.js·node.js
Luckyfif7 小时前
Webpack 是什么? 解决了什么问题? 核心流程是什么?
前端·webpack·node.js
熊的猫9 小时前
如何封装一个可取消的 HTTP 请求?
前端·javascript·vue.js·网络协议·http·webpack·node.js
黑金IT12 小时前
为什么使用Node.js爬虫更优
javascript·爬虫·node.js
API开发1 天前
APISQL企业版离线部署教程
sql·node.js·api·restful·graphql·apisql
前端小垃圾(找工作真难呐)1 天前
将项目从 Webpack 到 Vite 迁移的步骤
前端·webpack·node.js
黑金IT1 天前
Node.js与Python的交互:使用node-pyrunner模块
开发语言·python·node.js·交互
Fan_web2 天前
Node.js——初识Node.js
开发语言·前端·node.js