Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 为什么Float64Array的数组在Node.js中占用了这么多内存?_Arrays_Node.js_Memory_Memory Management - Fatal编程技术网

Arrays 为什么Float64Array的数组在Node.js中占用了这么多内存?

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

发现了一个非常有趣的情况,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字节,乘以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兆的内存,分配和执行几乎是瞬间完成的。)