Ответ
Garbage Collection (GC) в Go — это автоматическое управление памятью, основанное на алгоритме mark-and-sweep с оптимизациями.
Основные этапы:
- Mark (пометка): GC сканирует объекты в куче, начиная с корневых (глобальные переменные, стек вызовов), помечая достижимые.
- Sweep (очистка): Удаляет непомеченные (недостижимые) объекты, освобождая память.
Особенности Go GC:
- Concurrent: Работает параллельно с программой (не останавливает её полностью).
- Триколорная маркировка: Использует 3 цвета (белый, серый, чёрный) для эффективного трекинга объектов.
- Write Barrier: Гарантирует корректность при изменении ссылок во время работы GC.
// Пример принудительного запуска GC (обычно не требуется)
runtime.GC()
Оптимизации:
- Generational гипотеза: В Go 1.19+ добавлены поколения (young/old объекты).
- Pacer: Регулирует частоту GC на основе нагрузки.
GC в Go минимизирует латентность, но может влиять на производительность в real-time системах.