Сборка мусора в V8 выполняется, когда ваш код не запущен и находится между действиями. Ваш while(true)
l oop работает вечно, и, таким образом, вы никогда не дадите V8 замену для сборки мусора.
По многим дополнительным причинам вы никогда не будете выполнять вечно l oop в Javascript (если у вас нет await
внутри l oop), потому что nodejs является в значительной степени однопоточной системой, управляемой событиями, и когда вы заняты включением while(true)
l oop, никакие события не могут быть обработаны так много вещей не может быть сделано в nodejs.
Почему это и как я могу предотвратить это?
Сборщики мусора часто предназначены для код запускается и не мешает их выполнению, а затем, в тот момент, когда ваш код ничего не делает и завершил работу со своим внутренним состоянием, сборщик мусора проверяет состояние объектов в куче, чтобы найти объекты, которые больше не используются.
Вы предотвратите это, не входя в ограниченный l oop, как этот, не предоставляя времени простоя, чтобы G C мог работать. Как объяснено выше, жесткий l oop, как это, предотвращает запуск любых других событий в nodejs в любом случае, так что это вообще плохая причина и по другим причинам.
Обратите внимание, что ваш код не только создает 444 dom
экземпляров и всех объектов, связанных с этими экземплярами, но он не дает возможности очистить все временные переменные / строки, которые использовались при создании этого экземпляра dom
, что может быть важно при разборе HTML Таким образом, общее использование памяти значительно выше, чем у 444 законченных dom
экземпляров Если вы вставите в l oop какой-либо тип передышки, то у G C появится возможность убрать вещи, которые больше не используются.