Go использует concurrent, tri-color mark-and-sweep GC.
Три цвета: белый (не посещён, кандидат на удаление), серый (посещён, но потомки не проверены), чёрный (посещён, потомки проверены).
Фазы: 1. Mark — начинает с корней (стек, глобалы), помечает достижимые объекты. Работает параллельно с приложением (concurrent). 2. Sweep — освобождает белые (недостижимые) объекты.
GC запускается когда heap вырос на GOGC процентов (по умолчанию 100% — удвоение).
// Тюнинг
GOGC=200 // реже собирает, больше памяти
GOMEMLIMIT=1GiB // Go 1.19+, мягкий лимит памяти
STW (stop-the-world) паузы в Go минимальны — обычно <1мс. Основная работа идёт concurrent.