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 两个变量的引用,不会被垃圾回收。

相关推荐
Never_Satisfied1 天前
在JavaScript / Node.js中,package.json文件中的依赖项自动选择最新版安装
javascript·node.js·json
yhole1 天前
如何升级node.js版本
node.js
Luna-player1 天前
vue3,单页应用学习笔记
node.js
天远云服1 天前
天远企业司法认证API对接实战:PHP构建B2B供应链合规防火墙
大数据·开发语言·后端·node.js·php
lzp07911 天前
如何在Windows系统上安装和配置Node.js及Node版本管理器(nvm)
windows·node.js
weiwx832 天前
【前端】Node.js使用教程
前端·node.js·vim
i建模2 天前
Ubuntu Node.js 升级方案
linux·运维·ubuntu·node.js
结网的兔子2 天前
前端学习笔记(实战准备篇)——用vite构建一个项目【吐血整理】
前端·学习·elementui·npm·node.js·vue
i建模2 天前
npm国内镜像源加速
前端·npm·node.js
热爱生活的五柒2 天前
解决 npm install 一直在转圈的问题
前端·npm·node.js