Arrays 为什么Float64Array的数组在Node.js中占用了这么多内存?
发现了一个非常有趣的情况,node.js 6.11.0,赢10。运行此代码之后Arrays 为什么Float64Array的数组在Node.js中占用了这么多内存?,arrays,node.js,memory,memory-management,Arrays,Node.js,Memory,Memory Management,发现了一个非常有趣的情况,node.js 6.11.0,赢10。运行此代码之后 function rand() {return Math.floor(Math.random()*10);} let s = new Array(10000000).fill(0).map(a => new Float64Array([rand(), rand()])); 调用global.gc()几次,node.js环境占用了1,7GB的空间。我对此没有任何解释-两个数字组成的数组占用16字节,乘以1000
function rand() {return Math.floor(Math.random()*10);}
let s = new Array(10000000).fill(0).map(a => new Float64Array([rand(), rand()]));
调用global.gc()
几次,node.js环境占用了1,7GB的空间。我对此没有任何解释-两个数字组成的数组占用16字节,乘以10000000约为160MB。即使假设数组s
的每个元素实际上都是指向Float64Array的指针(另一个8字节),它也会产生240MB,但肯定不是1,7GB
对此的解释是什么?查看
节点--检查(节点9.5.0)的输出是否有错误
function rand() {
return Math.floor(Math.random()*10);
}
const arr = [];
for(var i = 0; i < 1000000; i++) {
arr.push(new Float64Array([rand(), rand()]));
if(i % 1000 == 0) {
console.log(i);
}
}
global.x = arr;
函数rand(){
返回Math.floor(Math.random()*10);
}
常数arr=[];
对于(变量i=0;i<1000000;i++){
arr.push(新的Float64Array([rand(),rand()]);
如果(i%1000==0){
控制台日志(i);
}
}
全局x=arr;
看起来,2个项目的每个Float64Array
s都需要208字节的内存,因此每个对象的开销“很简单”
如果您需要类似的东西,我建议分配一个2*10000000项的平面Float64Array
,并对其进行索引。(FWIW,我刚刚尝试过:一个2亿项的Float64Array占用600兆的内存,分配和执行几乎是瞬间完成的。)