V8 разработчик здесь.Краткий ответ: GC может работать в любое время и запускаться в любое время.
Обратите внимание, что сборщик мусора представляет собой довольно сложную систему: он выполняет несколько различных задач и выполняет большинство из них поэтапно и / или одновременно с основным потоком.В частности, каждое распределение может инициировать небольшую добавочную работу GC.(Это подразумевает, что, очень тщательно избегая всех распределений, вы можете создавать циклы, которые не будут вызывать активность GC во время их работы; но никогда не бывает, что циклы накапливают мусор, который не может быть собран - если у вас нет утечки в вашемкод, конечно, где объекты непреднамеренно остаются достижимыми.)
Может ли сборщик мусора работать во время цикла или он может работать только в режиме ожидания приложения?
Он абсолютно может и будет работать во время цикла.
Node.js имеет --nouse-idle-Уведомление, которое теоретически отключает GC
Нет, это делаетне.Нет возможности отключить GC.Этот флаг отключает один конкретный механизм для запуска активности GC, но это только означает, что GC будет запускаться другими механизмами.
GC запускается только тогда, когда отправлено уведомление о бездействии (когда основной поток незанятости)
Нет, идея состоит в том, чтобы выполнить несколько дополнительных циклов GC, когда есть время простоя, чтобы сохранить часть памяти, когда приложение не занято.
мой цикл иногда имеет всплески времени выполнения и хочет знать, возможно ли, что GC может работать во время цикла, что приводит к скачку задержки
Это может быть.Это также может быть связано с оптимизацией или деоптимизацией функции.Или это может быть что-то другое - например, операционная система, прерывающая ваш процесс или назначающая его другому ядру ЦП, или сотни других причин.Компьютеры - это сложные машины; -)
, если для переменной задано значение null - сборка мусора выполняется немедленно
Нет, это не так.Сборка мусора никогда не выполняется немедленно (по крайней мере, в V8).