Как в Go устроены сборка мусора и размещение на стеке или в куче?
- Что такое escape analysis в Go?
- Что настраивают GOGC и GOMEMLIMIT?
GC в Go — конкурентный mark-and-sweep без поколений и без перемещения объектов, с паузами в доли миллисекунды. Где разместить значение, решает escape analysis компилятора: не «убегает» из функции — на стек (бесплатно), иначе — в кучу (работа для GC). GOGC задаёт частоту сборок, GOMEMLIMIT — мягкий лимит памяти.
- go build -gcflags=-m показывает, что убегает в кучу
- Убегают: возврат указателя, сохранение в интерфейс или замыкание, слишком большие значения
- sync.Pool — переиспользовать временные объекты в горячем коде
А ещё GOMEMLIMIT (1.19) в контейнере — меньше риск OOM-kill
Подробно
Сборщик. Трёхцветная маркировка выполняется параллельно с программой, короткие остановки нужны только на начало и конец фазы. Барьер записи отслеживает изменения ссылок. Объекты не перемещаются, поэтому нет уплотнения — вместо него аллокатор с классами размеров.
GOGC=100 (по умолчанию): следующая сборка, когда куча вырастет на 100% от живых данных после предыдущей. Больше — реже сборки, больше памяти. GOMEMLIMIT — при приближении к лимиту GC работает чаще, удерживая память; полезно в контейнерах с жёстким лимитом.
Escape analysis:
func newUser() *User {
u := User{} // убегает: возвращается указатель → куча
return &u
}
func sum(xs []int) int {
total := 0 // остаётся на стеке
...
}
Снижение нагрузки на GC: меньше аллокаций в горячем коде — предвыделять срезы, возвращать значения вместо указателей для мелких структур, strings.Builder, sync.Pool для буферов. Профиль аллокаций — pprof -alloc_space.
Что хотят услышать
- Свойства сборщика Go.
- Escape analysis и как его посмотреть.
- GOGC и GOMEMLIMIT.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✓Конкурентный mark-and-sweep; escape analysis решает, стек или куча
- ✗Поколенческий перемещающий GC; всё, что создано через new, всегда попадает в кучу
- ✗Все значения в Go размещаются в куче
- ✗GOGC задаёт жёсткий лимит памяти процесса
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.