> Что такое garbage collector и как он работает (Go)

Уровень: junior · Роль: backend · Категория: Технические вопросы

Компании: MTS, Астра

Стек: Go

> Пример ответа

Сборщик мусора (GC) - это автоматический механизм управления памятью, который освобождает программиста от ручного выделения и освобождения памяти. В Go GC основан на алгоритме tri-color mark-and-sweep (трехцветная маркировка и очистка) и работает конкурентно (concurrent), то есть параллельно с основным кодом.

Как это работает в Go:

  1. Фаза маркировки (Mark): Сборщик проходит по графу объектов, начиная с корневых ссылок (глобальные переменные, стек горутины). Объекты делятся на три цвета:

    • Белый: потенциально мусор (недостижим).
    • Серый: достижим, но его потомки еще не проверены.
    • Черный: достижим и полностью проверен. Алгоритм итеративно берет серые объекты, красит их в черный, а их потомков - в серый. Когда серых не остается, все белые объекты - мусор.
  2. Фаза очистки (Sweep): Память белых объектов возвращается в кучу для повторного использования. В Go эта фаза также конкурентна и может выполняться постепенно.

Ключевая особенность Go - низкая задержка (low latency): GC старается не останавливать выполнение программы надолго (обычно < 1 мс). Для этого используется write barrier - механизм, который отслеживает изменения указателей во время маркировки, чтобы не потерять ссылки на живые объекты. Если программе критична производительность, можно настроить GC через GOGC (процент роста кучи перед запуском GC) или отключить его для отдельных участков через runtime.LockOSThread.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью