node.js - 处理内存不足

时间:2013-04-28 19:29:20

标签: node.js memory

为什么这会给我致命的错误:JS分配失败 - 处理内存不足

arr = []

for (var x=0;x<6000;x++){
    var ys=[];
    arr.push(ys);
    for (var y=0;y<6000;y++){
        var tile = [0,1,2];
        ys.push(tile);
    }
}

我看到它的方式只有108000000英寸,或432mb,距离1.4gb极限非常远

1 个答案:

答案 0 :(得分:5)

你不指望的事情:

  • 数组对象的开销
  • 对象引用的大小
  • 程序正在做的任何其他事情
  • Node.js内存本身

如果我们假设对象引用是64位(不确定大小...),那么你有3600万个refs * 4个字节= 144个兆字节。

在我们计算数组开销之前,你达到了576 MB。

此外,由于数组是可调整大小的,我不确定分配的长度是否完全基于大小,或者运行时是否会分配额外的内存以防万一。

如果我记得,当扩展Java中的ArrayList时,它实际上会加倍。

我不确切知道如何在JavaScript中实现数组,但鉴于读取array.length是常量时间,每个数组可能都有一个预先计算的长度属性。

由于你有3600万个阵列,你还有144兆字​​节。

到目前为止,还有720 MB的数量。

我希望那些数组不像ArrayList那样进行双重分配。