Vite 不参与垃圾回收,GC 由底层 V8 引擎执行;新生代(1–32 MB)用 Scavenge 算法复制回收短命小对象,大对象直入老生代;老生代(默认约 1.4 GB)用 Mark-Sweep/Compact 应对长寿对象与碎片;对象通过晋升机制在两代间动态流转。

Vite 本身不参与垃圾回收,它是一个构建工具,运行在 Node.js 环境中;真正执行 GC 的是底层 V8 引擎。Node.js 启动时初始化 V8 实例,其内存堆结构完全由 V8 控制——新生代与老生代的划分逻辑与浏览器环境一致,只是参数可调、运行上下文不同。
使用一条命令部署ProbeChain Rydberg测试网代理节点。自动注册为Agent(NodeType=1),免gas,支持macOS/Linux/Windows。触发词:/r
新生代专收短命小对象,靠空间隔离+快速复制实现毫秒级回收
新生代(Young Generation)不是按“创建时间”静态切分,而是依据对象存活概率动态承载:
- 默认大小为 1–8 MB(64 位系统常见 16–32 MB),严格划分为两个等大的半区(From-Space 和 To-Space),仅其中一块用于分配新对象
- 新分配的小对象(如函数内
const x = {a: 1}、短数组、临时字符串)一律进入当前活跃半区(通常是 Eden 区概念的简化实现) - 大对象(如
new ArrayBuffer(2 * 1024 * 1024)或长字符串)一创建就跳过新生代,直入老生代,避免复制开销 - 回收触发条件是当前半区填满,采用 Scavenge 算法:只扫描 From-Space 中的存活对象,复制到 To-Space;复制完成后清空整个 From-Space,再交换角色
老生代容纳长寿对象,用标记+清除+整理应对碎片与吞吐压力
老生代(Old Generation)是长期存活对象的主存储区,行为特征和管理方式明显不同:
- 空间弹性大(64 位 Node.js 默认上限约 1.4 GB,可通过
--max-old-space-size=4096手动设为 4GB) - 存放全局变量(
globalThis.cache)、模块缓存(require.cache)、长期闭包捕获的变量、DOM 类似物(如 Node.js 中的process引用)、持久化 Buffer 等 - 不采用复制算法,改用 Mark-Sweep(标记-清除)为主,碎片过多时触发 Mark-Compact(标记-整理)
- GC 触发更保守:当老生代已用内存达到阈值(如 70%)或内存压力上升时启动,V8 会启用增量标记(主线程穿插执行)与并发标记(后台线程执行),大幅降低单次停顿
对象在两代之间不是固定归属,而是靠晋升机制动态流转
一个对象不属于某个“世代标签”,而是在运行中被 V8 根据行为判定去向:
- 在新生代经历两次 Scavenge 后仍存活 → 晋升至老生代
- 某次 Scavenge 时 To-Space 剩余空间不足(例如已占用超 25%)→ 提前将部分存活对象晋升,防分配失败
- 写屏障检测到老生代对象新增对新生代对象的引用 → 该新生代对象会被标记为“需重点跟踪”,影响后续晋升决策
Node.js 启动时可通过命令行参数微调边界:
-
--max-semi-space-size=4将新生代总大小设为 4 MB(适合内存敏感服务) -
--max-old-space-size=2048把老生代上限设为 2 GB(大型数据处理场景常用)
这些参数改变的是空间容量和触发阈值,不改变分代逻辑本身——V8 的代际假说和晋升规则始终生效。

















