Ответ
Сборщик мусора (GC) в Go запускается автоматически и конкурентно, минимизируя паузы в работе приложения (Stop-The-World). Существует три основных триггера для его запуска:
-
Достижение порога по памяти (основной триггер). GC запускается, когда объем новой выделенной памяти достигает определенного порога. Этот порог вычисляется на основе переменной окружения
GOGC
(по умолчанию100
).GOGC=100
означает, что сборка мусора начнется, когда размер кучи (heap) станет в два раза больше, чем размер живых объектов после предыдущей сборки. -
Принудительный запуск. Разработчик может вручную запустить сборку мусора, вызвав функцию
runtime.GC()
. Это блокирующий вызов, который дожидается окончания цикла GC. Обычно используется для отладки или в специфических сценариях, когда нужно освободить память немедленно.import "runtime" // ... runtime.GC() // Принудительно запускаем полный цикл сборки мусора
-
По таймеру. Если сборка мусора не запускалась в течение определенного времени (по умолчанию 2 минуты), система может запустить ее принудительно. Это гарантирует, что даже в приложениях с низким уровнем аллокаций память будет периодически очищаться.
Для отладки и анализа работы GC можно использовать переменную окружения GODEBUG=gctrace=1
, которая будет выводить в консоль подробную информацию о каждом цикле сборки.