Почему использование кучи памяти продолжает расти? - PullRequest
2 голосов
/ 21 мая 2019

В приведенном ниже фрагменте кода я не добавляю ничего нового в DOM и не создаю динамический тип данных.Я также не увеличиваю размер массива или что-то еще.Тем не менее, когда вы запускаете код (должен быть размещен или размещен локально) в Chrome, значение

 performance.memory.usedJSHeapSize 

продолжает увеличиваться.Почему?

<html>

<body>
    <p id="memory" style="position: fixed; top:10px; left:10px; font-size: 1.5em;"></p>
    <script>
        setInterval(() => {
            document.getElementById("memory").innerHTML = performance.memory.usedJSHeapSize;
        }, 300);

    </script>
</body>

</html>

Он также доступен для просмотра ( открыто в Chrome или Opera ):

http://appsdepo.com/temp/memory_leak.html

1 Ответ

1 голос
/ 21 мая 2019

В этом коде есть как минимум два выделения:

(1) performance.memory создает новый объект каждый раз, когда вы вызываете его.Он реализован в собственном коде, но эквивалент в JavaScript будет примерно таким:

Object.defineProperty(performance.__proto__, "memory", 
                      {get: function() { 
                          return {usedJSHeapSize: ..., 
                                  totalJSHeapSize: ...,
                                  ...: ...};
                      });

(2) usedJSHeapSize возвращает число, но вы присваиваете это значение установщику, для которого требуется строка, поэтомунеявно преобразуется в строку, которая является другим распределением.

Обратите внимание, что ни одна из этих проблем не является утечкой: при запуске сборки мусора очищаются все старые временные объекты, которые больше не требуются.Это займет некоторое время, пока вокруг не будет достаточно мусора, и Chrome решит, что выполнение некоторого GC - это хорошее использование вашего процессора.

...