CNode

为什么循环构造长度为1亿的数组在node中会报内存不足?

问答
Sshizengzhou发布于8 年前最后回复8 年前10 回复4655 浏览0 收藏

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

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

回复 (10)

K
KevinZoro#1·8 年前

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

S
shizengzhou#2·8 年前

@KevinZoro node.png

W
waitingsong#3·8 年前

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

S
shizengzhou#4·8 年前

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

J
JacksonTian#6·8 年前

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

F
fwgood#7·8 年前

使用buffer吧

来自酷炫的 CNodeMD

X
xivistudios#8·8 年前

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

D
dadaa1#9·8 年前

V8的运行内存是有限的~

E
eyblog#10·8 年前

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

参与回复
登录后即可参与回复。登录