为什么循环构造长度为1亿的数组在node中会报内存不足?
发布于 7 年前 作者 shizengzhou 3442 次浏览 来自 问答

以下代码在node中运行会报错

let arr = [];
for (let i = 0; i < 100000000; i++) {
  arr.push(1);
}
console.log(arr.length);
10 回复

不会报错啊?你会报什么错,截个图?

报错是内存不足,并不代表数组长度不能达到 2^32 - 1。

@waitingsong node是有什么内存限制吗?

32位机器只有 ~700 MB 的堆限制

使用buffer吧

来自酷炫的 CNodeMD

这种情况你只能适用buffer或者redis

V8的运行内存是有限的~

上面说的对,v8的堆内存有限制,64位系统大概1.4g,32位0.7g。buffer的申请的内存是堆外内存,所以不受这个限制。。。或者启动脚本的时候加上 --max-old-space-size或者–max-new-space-size 来设置老生代内存空间和新生代内存空间。。。。刚看完深入浅出可用上了。2333

回到顶部