You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript 中如何获取 Map 实例所占用的字节大小

核心说明

JavaScript 本身没有内置的标准API可以直接精准获取单个Map实例占用的内存字节数,不同JS引擎(V8、SpiderMonkey等)对Map的内存布局优化逻辑不同,最终占用大小会存在差异。

常用测量方案

1. 浏览器环境粗略测量

可以通过两次内存快照的差值估算:

  • 先调用gc()手动触发垃圾回收(注意要先在浏览器开发者工具的「性能」或「内存」面板开启允许手动GC)
  • 记录初始内存值:const start = performance.memory.usedJSHeapSize;
  • 创建你要测试的Map实例和内部元素
  • 再次触发GC后记录结束内存值:const end = performance.memory.usedJSHeapSize;
  • 差值end - start就是大致的占用字节数,建议多测几次取平均值排除波动。
    注意:performance.memory是Chrome系浏览器的非标准API,仅适合本地开发调试用,不要在生产环境使用。

2. Node.js环境精准测量

Node.js中可以用process.memoryUsage()结合GC来计算,示例代码:

// 启动Node进程时需加 --expose-gc 参数,比如 node --expose-gc test.js
global.gc();
const start = process.memoryUsage().heapUsed;

const cache = new Map();
cache.set("1", { id: "1" });

global.gc();
const end = process.memoryUsage().heapUsed;
console.log(`预估占用字节数:${end - start}`);

如果需要更高精度,可以批量创建N个相同结构的Map,总差值除以N,消除内存对齐、临时对象的干扰。

3. 序列化后估算(跨环境通用,误差较大)

如果不需要非常精准的结果,可以把Map序列化后看字节长度做粗略估算:

// 先把Map转成可序列化的普通对象
const mapStr = JSON.stringify(Object.fromEntries(cache));
// 字符串转Uint8Array取长度
const bytes = new TextEncoder().encode(mapStr).length;
console.log(`序列化后字节长度:${bytes}`);

注意:这个方法的结果只包含键值对的内容大小,没有计算Map本身的底层数据结构(比如哈希表、链表指针等)的内存开销,结果会比实际占用小很多。

内容的提问来源于stack exchange,提问作者Raul

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 00:39:04