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

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

  •  
  •   slmaaw Apr 7, 2022 via Android 7718 views
    This topic created in 1522 days ago, the information mentioned may be changed or developed.
    有一个空对象{}或者 map ,向其中塞入以下 kv:

    key 是 uuid<string>

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

    请问塞入 100 万个的话,这个对象或者 map 会占用多大内存?
    7 replies    2022-04-08 10:15:39 +08:00
    eason1874
       
    eason1874  
       Apr 7, 2022
    1GB 以上吧,你本地写段代码真塞 100 万数据进去不就知道了
    eason1874
        2
    eason1874  
       Apr 7, 2022
    不对,脑子短路了,算错了,应该不到 100MB
    noe132
        3
    noe132  
       Apr 7, 2022
    不同引擎实现不同占用的内存也不同。
    不过可以大概估算,uuid 就是个 36 字符的字符串,number 如果格式统一就是个 int32 。如果没有介入优化,通常就是一个大数组,那么就是字符串+int32 的大小 x 1m 。如果介入优化,还需要加上 hashtable 的大小。
    secondwtq
        5
    secondwtq  
       Apr 7, 2022
    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
        6
    libook  
       Apr 8, 2022
    Node 使用 VM 来运行程序的,这玩意的设计初衷就是让用户把精力放在业务上而不是资源管理上,所以有很多内置的优化策略,以及复杂的 GC 策略,对于用户来说是黑盒,最可靠的方式是进行压测,取个大概的资源数量级。

    如果对内存使用有精确要求,建议使用可以明确操作内存的语言,比如 C/C++。
    wu67
        7
    wu67  
       Apr 8, 2022
    8 楼说的很对. 压测基本能分析出你的内存大致占用范围以及部分优化点, 真要更较真的花, 应该选择更底层一点的语言, 如 c/ 汇编.
    About     Help     Advertise     Blog     API     FAQ     Solana     6161 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 51ms UTC 03:05 PVG 11:05 LAX 20:05 JFK 23:05
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86