我正在开发一个Javascript应用程序,它在表示图像数据的数组上执行大量的每像素操作。当我设置数组时,我从一个空的'[]‘开始,然后用零填充它,有点像这样:
<!DOCTYPE html>
<html>
<head>
<script>
function makeBigArray()
{
// Create a data array for a 5000*5000 RGB image
var imageData = [];
for (var i = 0, lenI = 5000*5000*3; i < lenI; i++)
{
imageData.push(0);
}
}
</script>
</head>
<body>
<button onclick="makeBigArray()">Make Big Array</button>
</body>
</html>
我很快就注意到,像这样的循环似乎会导致大量的内存命中。当我执行上面的代码时,我得到的内存使用量在2 2GB范围内。
有人能解释一下为什么像这样简单地将元素推入数组就会产生如此高的内存使用率吗?
发布于 2018-10-21 00:37:11
在javascript中,每个数字都是一个double
,在大多数系统中是8个字节。这意味着您的数组在大多数系统上是600000000字节(600MB)。而且,大多数情况下,当您推送到数组时,浏览器会分配一个新的内存块,而垃圾收集器不会立即释放内存。如果内存有问题,请使用具有一个数字的Array构造函数来表示元素的数量,以执行较少的分配。您也可以使用类型化数组,但修改它们是CPU密集型的。
https://stackoverflow.com/questions/52907713
复制相似问题