Расскажи про алгоритм GC

«Расскажи про алгоритм GC» — вопрос из категории Golang, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Garbage Collection (GC) в Go — это автоматическое управление памятью, основанное на алгоритме mark-and-sweep с оптимизациями.

Основные этапы:

  1. Mark (пометка): GC сканирует объекты в куче, начиная с корневых (глобальные переменные, стек вызовов), помечая достижимые.
  2. Sweep (очистка): Удаляет непомеченные (недостижимые) объекты, освобождая память.

Особенности Go GC:

  • Concurrent: Работает параллельно с программой (не останавливает её полностью).
  • Триколорная маркировка: Использует 3 цвета (белый, серый, чёрный) для эффективного трекинга объектов.
  • Write Barrier: Гарантирует корректность при изменении ссылок во время работы GC.
// Пример принудительного запуска GC (обычно не требуется)
runtime.GC()

Оптимизации:

  • Generational гипотеза: В Go 1.19+ добавлены поколения (young/old объекты).
  • Pacer: Регулирует частоту GC на основе нагрузки.

GC в Go минимизирует латентность, но может влиять на производительность в real-time системах.