У меня есть функция таймера, которая создает большой объем данных, объявленных с помощью 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 - добавление комментарияперенести этот вопрос на вершину ТАК.Если кто-то знает, пожалуйста, добавьте свои мысли.