Почему у этого javascript есть утечка памяти в Chrome? - PullRequest
0 голосов
/ 24 декабря 2018

У меня есть функция таймера, которая создает большой объем данных, объявленных с помощью var.Почему объект не подвергается сборке мусора?Число, показанное usedJSHeapSize, продолжает расти.Диспетчер задач в Chrome также показывает увеличение памяти.

Я тестирую это в Windows 10, Chrome, используя VS 2017.

Если я скопирую и вставлю код в отдельный файл с именем test.HTML и открыть, что в Chrome, это также показывает утечку.

Я тестировал этот код в Edge и IE (используя Developer Tools вместо использовали JSHeapSize) и не вижу утечки памяти.

Это проблема с Chrome?

    <script type="text/javascript">
        function refreshTimer() {
            try {
                var longStr = new Array(1000000).join('*');
                document.getElementById('div1').textContent = 'usedJSHeapSize: ' + window.performance.memory.usedJSHeapSize;
            }
            catch (err) {
                document.getElementById('div1').textContent = 'refreshTimer: ' + err;
            }
        }
        window.setInterval("refreshTimer()", 3*1000);
    </script>
    <div id="div1" style="font-family:Calibri"></div>

Я ожидаю, что не будет утечки памяти, потому что большой объект данных объявляется с помощью var и должен собираться мусором, когда он покидает область видимости.

Отредактируйте мой оригинальный пост:

Я запускал Chrome с и без "--enable-точной-памяти-информации", и это не имеет значения.Я наблюдал рост памяти в Chrome-> More Tools-> Task Manager и в диспетчере задач Windows, когда только один экземпляр Chrome работал с моим файлом test.html.Единственные ссылки, которые я могу найти, которые упоминают это как возможную ошибку в Chrome, это:

Сборка мусора Javascript типизированных массивов в Chrome

https://bugs.chromium.org/p/chromium/issues/detail?id=232415

Это старые сообщения, и я не могу поверить, что ошибка будет жить так долго.

Так что - я все еще в замешательстве.

1/2/2019 - добавление комментарияперенести этот вопрос на вершину ТАК.Если кто-то знает, пожалуйста, добавьте свои мысли.

1 Ответ

0 голосов
/ 24 декабря 2018

Вы столкнулись с проблемой безопасности в Chrome.Chrome не отображает истинное использование памяти через "window.performance.memory".Злоумышленники могут использовать эту информацию для атаки на веб-браузер.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...