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

相关推荐
孟陬12 小时前
高质量全方位的 AI 工具 sse-stuntman — Mock SSE 接口
前端·node.js·openai
掰头战士12 小时前
你本地的LLM有时会胡乱使用tools?不妨用MCP规范LLM工具调用!
node.js·llm·全栈
触底反弹13 小时前
🧠 LangChain Agent 入门:为什么直接调大模型 API 远远不够?
人工智能·node.js·llm
书中枫叶13 小时前
从「上次几点喂奶」到全栈小程序:我做了个喂宝助手
mongodb·微信小程序·node.js
Asize15 小时前
Node path 与 fs 模块:从回调地狱到 async await 的异步进化
javascript·node.js
大家的林语冰17 小时前
😭 Electron 麻了,Deno 直接支持二进制应用,无需第三方桌面应用框架!
前端·javascript·node.js
Kel19 小时前
管道、IPC、Socket:你以为的三种技术,其实是同一件事
javascript·设计模式·node.js
Agent治理法学19 小时前
我开源了一套 AI Agent 框架:有性格、有规则、还会自己造工具
node.js·github
riuphan19 小时前
RAG 是什么?带你从0搭建本地向量数据库
node.js
江华森2 天前
前端构建工具 Webpack 速览
前端·webpack·node.js