Ответ
Основной нюанс GC в Go — недетерминированность срабатывания. Сборщик мусора работает автоматически, но точное время вызова нельзя предсказать. Это может вызывать неожиданные паузы (STW — stop-the-world) в работе программы, особенно при работе с большими объемами данных.
Пример:
func main() {
var m map[int]string
for i := 0; i < 1e6; i++ {
m = make(map[int]string) // создаем мусор
}
runtime.GC() // принудительный вызов GC (не рекомендуется в продакшене)
}
Важно:
- GC использует триколорную маркировку и параллельную сборку
- Настройки GOGC (по умолчанию 100%) позволяют управлять частотой сборки
- Лучше минимизировать аллокации в горячих путях