Назад к вопросам
Middle+
3
Как работает сборщик мусора в Go (tri-color marking)?
Компании, где спрашивали
Защита Инфо Транс z-it
Ответ от нейросети
sobes.tech AI
Сборщик мусора в Go использует алгоритм tri-color marking (трёхцветная маркировка) для эффективного обнаружения и удаления неиспользуемых объектов.
Основная идея:
- Все объекты на куче делятся на три цвета:
- Белые — объекты, которые ещё не проверены и считаются потенциально мусором.
- Серые — объекты, которые обнаружены как достижимые, но их потомки ещё не проверены.
- Чёрные — объекты, которые достижимы и все их потомки проверены.
Процесс:
- Изначально все объекты белые.
- Корневые объекты (root set) помечаются серыми и помещаются в очередь.
- Пока очередь не пуста, берём серый объект, помечаем его чёрным и все его дочерние объекты, если они белые, помечаем серыми и добавляем в очередь.
- После завершения обхода все белые объекты считаются недостижимыми и удаляются.
В Go сборщик мусора работает параллельно с приложением (concurrent), минимизируя паузы. Tri-color marking помогает избежать проблем с изменением графа объектов во время работы сборщика.
Это позволяет эффективно и безопасно освобождать память без остановки программы на длительное время.