Как работает garbage collector в Go?

Middle
1.2k просмотров
AFK Offer AI

Go использует concurrent, tri-color mark-and-sweep GC.

Три цвета: белый (не посещён, кандидат на удаление), серый (посещён, но потомки не проверены), чёрный (посещён, потомки проверены).

Фазы: 1. Mark — начинает с корней (стек, глобалы), помечает достижимые объекты. Работает параллельно с приложением (concurrent). 2. Sweep — освобождает белые (недостижимые) объекты.

GC запускается когда heap вырос на GOGC процентов (по умолчанию 100% — удвоение).

// Тюнинг
GOGC=200          // реже собирает, больше памяти
GOMEMLIMIT=1GiB   // Go 1.19+, мягкий лимит памяти

STW (stop-the-world) паузы в Go минимальны — обычно <1мс. Основная работа идёт concurrent.

Следующий вопрос

Что такое принципы SOLID?