Sobes.tech
Назад к вопросам
Middle+
4

Расскажи про сборщик мусора в Go (трёхцветная маркировка).

Компании, где спрашивали
X5

Ответ от нейросети

sobes.tech AI

В Go используется трёхцветная маркировка для реализации сборщика мусора (GC), основанного на алгоритме маркировки и очистки. Основная идея — разделить объекты на три категории (цвета) во время обхода графа объектов:

  • Белый: объекты, которые ещё не посещены и потенциально могут быть удалены.
  • Серый: объекты, которые были найдены, но их потомки ещё не обработаны.
  • Чёрный: объекты, которые были посещены, и все их потомки тоже обработаны.

Алгоритм работает так:

  1. Все объекты изначально белые.
  2. Корневые объекты (например, глобальные переменные, стеки) помечаются серыми.
  3. Пока есть серые объекты, берём один, помечаем его чёрным и помечаем всех его дочерних объектов серыми (если они белые).
  4. После обхода все белые объекты считаются недостижимыми и удаляются.

Такой подход позволяет безопасно и эффективно собирать мусор, не блокируя полностью выполнение программы, и минимизирует паузы. В Go сборщик мусора работает параллельно с программой, используя эту маркировку для отслеживания живых объектов.