我正在开发一个 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>
我很快注意到像这样的循环会导致大量的内存命中。当我执行上述代码时,我得到的内存使用量在 2GB 范围内。
有人可以解释为什么简单地将元素插入数组会产生如此高的内存使用率吗?
最佳答案
在 javascript 中,每个数字都是一个 double
,并且在大多数系统上为 8 个字节。这意味着在大多数系统上您的数组为 600000000 字节 (600 MB)。同样,大多数时候,当您推送到数组时,浏览器会分配一个新的内存块,并且垃圾收集器不会立即释放内存。如果内存是个问题,请使用带有一个数字的数组构造函数来表示元素数量,以执行更少的分配。您还可以使用类型化数组,但修改它们会占用大量 CPU。
关于Javascript - 处理大数组时的内存问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52907713/