为什么这会给我致命的错误: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极限非常远
答案 0 :(得分:5)
你不指望的事情:
如果我们假设对象引用是64位(不确定大小...),那么你有3600万个refs * 4个字节= 144个兆字节。
在我们计算数组开销之前,你达到了576 MB。
此外,由于数组是可调整大小的,我不确定分配的长度是否完全基于大小,或者运行时是否会分配额外的内存以防万一。
如果我记得,当扩展Java中的ArrayList时,它实际上会加倍。
我不确切知道如何在JavaScript中实现数组,但鉴于读取array.length是常量时间,每个数组可能都有一个预先计算的长度属性。
由于你有3600万个阵列,你还有144兆字节。
到目前为止,还有720 MB的数量。我希望那些数组不像ArrayList那样进行双重分配。