Sobes.tech
Back to questions
Senior
5

Расскажите про сборщик мусора (garbage collector) в Go. Что такое трехцветная маркировка? Что такое write barrier? Какие оптимизации используются?

Companies where asked
2gis2gis

Answer from AI

sobes.tech AI

В Go сборщик мусора (GC) — это триггерный, параллельный, конкурентный, маркирующий и очищающий сборщик с трехцветной маркировкой.

Трехцветная маркировка — это алгоритм, который разделяет объекты на три группы:

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

GC начинает с корневых объектов, помечая их серыми, затем последовательно обрабатывает серые объекты, помечая их потомков, пока не останется серых. В конце белые объекты считаются мусором и удаляются.

Write barrier — это механизм, который отслеживает изменения ссылок на объекты во время работы GC, чтобы гарантировать корректность маркировки при одновременном изменении графа объектов. В Go write barrier помогает GC видеть новые ссылки, появившиеся после начала маркировки, предотвращая ошибочное удаление живых объектов.

Оптимизации в Go GC:

  • Параллельное выполнение маркировки и очистки с минимальными паузами.
  • Инкрементальная маркировка для уменьшения времени пауз.
  • Использование write barriers для безопасности при конкурентном доступе.
  • Эффективное управление памятью и минимизация фрагментации.

Примерно так работает GC в Go, обеспечивая баланс между производительностью и своевременной очисткой памяти.