请教 nodejs 中数据占用内存的计算方法

2022-04-07 20:43:32 +08:00
 slmaaw
有一个空对象{}或者 map ,向其中塞入以下 kv:

key 是 uuid<string>

value 是时间戳数字<number>(类似 Date.now())

请问塞入 100 万个的话,这个对象或者 map 会占用多大内存?
6922 次点击
所在节点    Node.js
7 条回复
eason1874
2022-04-07 20:50:07 +08:00
1GB 以上吧,你本地写段代码真塞 100 万数据进去不就知道了
eason1874
2022-04-07 20:52:42 +08:00
不对,脑子短路了,算错了,应该不到 100MB
noe132
2022-04-07 20:53:29 +08:00
不同引擎实现不同占用的内存也不同。
不过可以大概估算,uuid 就是个 36 字符的字符串,number 如果格式统一就是个 int32 。如果没有介入优化,通常就是一个大数组,那么就是字符串+int32 的大小 x 1m 。如果介入优化,还需要加上 hashtable 的大小。
krapnik
2022-04-07 21:52:40 +08:00
secondwtq
2022-04-07 23:37:22 +08:00
Chrome 的 Web Inspector 里面有一个 Memory Tab ,可以分析内存占用。

试了一下:
const l = 1000000, data = {}
for (let i = 0; i < l; i++) data[i.toString().padStart(36, '0')] = Date.now()+i;

key 约占 48MB ,也就是说一个 string 48 字节,value 占 12MB ,一个 number 12 字节,再加上外面约 25MB ,一个键值对应该是 24 字节差不多
libook
2022-04-08 10:09:07 +08:00
Node 使用 VM 来运行程序的,这玩意的设计初衷就是让用户把精力放在业务上而不是资源管理上,所以有很多内置的优化策略,以及复杂的 GC 策略,对于用户来说是黑盒,最可靠的方式是进行压测,取个大概的资源数量级。

如果对内存使用有精确要求,建议使用可以明确操作内存的语言,比如 C/C++。
wu67
2022-04-08 10:15:39 +08:00
8 楼说的很对. 压测基本能分析出你的内存大致占用范围以及部分优化点, 真要更较真的花, 应该选择更底层一点的语言, 如 c/ 汇编.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/845559

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX