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

Как работает сборщик мусора в Go (tri-color marking)?

Компании, где спрашивали
Защита Инфо Транс z-it

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

sobes.tech AI

Сборщик мусора в Go использует алгоритм tri-color marking (трёхцветная маркировка) для эффективного обнаружения и удаления неиспользуемых объектов.

Основная идея:

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

Процесс:

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

В Go сборщик мусора работает параллельно с приложением (concurrent), минимизируя паузы. Tri-color marking помогает избежать проблем с изменением графа объектов во время работы сборщика.

Это позволяет эффективно и безопасно освобождать память без остановки программы на длительное время.