Javascript-处理大型阵列时的内存问题

时间:2018-10-20 16:23:21

标签: javascript arrays memory-leaks

我正在开发一个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范围内。

有人可以解释为什么简单地将元素推入这样的数组会产生如此高的内存使用率吗?

1 个答案:

答案 0 :(得分:1)

在javascript中,每个数字都是num1=2,在大多数系统上是8个字节。这意味着在大多数系统(600 MB)上,阵列为600000000字节。同样,大多数情况下,当您推送到阵列时,浏览器会分配一个新的内存块,并且垃圾回收器不会立即释放内存。如果存在内存问题,请对元素数量使用带有一个数字的Array构造函数来执行较少的分配。您也可以使用类型化数组,但修改它们会占用大量CPU。