Back to questions
Middle+
5
Расскажи про сборщик мусора в Go (трёхцветная маркировка).
Companies where asked
X5
Answer from AI
sobes.tech AI
В Go используется трёхцветная маркировка для реализации сборщика мусора (GC), основанного на алгоритме маркировки и очистки. Основная идея — разделить объекты на три категории (цвета) во время обхода графа объектов:
- Белый: объекты, которые ещё не посещены и потенциально могут быть удалены.
- Серый: объекты, которые были найдены, но их потомки ещё не обработаны.
- Чёрный: объекты, которые были посещены, и все их потомки тоже обработаны.
Алгоритм работает так:
- Все объекты изначально белые.
- Корневые объекты (например, глобальные переменные, стеки) помечаются серыми.
- Пока есть серые объекты, берём один, помечаем его чёрным и помечаем всех его дочерних объектов серыми (если они белые).
- После обхода все белые объекты считаются недостижимыми и удаляются.
Такой подход позволяет безопасно и эффективно собирать мусор, не блокируя полностью выполнение программы, и минимизирует паузы. В Go сборщик мусора работает параллельно с программой, используя эту маркировку для отслеживания живых объектов.