簡體   English   中英

Javascript-處理大型數組時的內存問題

[英]Javascript - memory issues when dealing with large arrays

我正在開發一個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個字節。 這意味着在大多數系統(600 MB)上,陣列為600000000字節。 同樣,大多數情況下,當您推送到陣列時,瀏覽器會分配一個新的內存塊,並且垃圾回收器不會立即釋放內存。 如果存在內存問題,請對元素數量使用帶有一個數字的Array構造函數來執行較少的分配。 您也可以使用類型化數組,但是修改它們會占用大量CPU。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM