Выбор ответа Middle Память, GC и pprof спрашивают часто обновлено
Какой сборщик мусора в Go
Вопрос
Какое описание сборщика мусора Go верно?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Конкурентный трёхцветный mark-and-sweep без перемещения и поколений. Go маркирует живые объекты параллельно с работой программы, а паузы нужны только на включение и завершение маркировки.
Варианты ответа
- Поколенческий копирующий сборщик с молодым и старым поколением, как в JVM
- Конкурентный трёхцветный mark-and-sweep без перемещения и поколенийправильный ответ
- Подсчёт ссылок с периодическим поиском циклов, как в CPython
- Сборка только при явном вызове runtime.GC() из кода
Разбор
Go маркирует живые объекты параллельно с работой программы, а паузы нужны только на включение и завершение маркировки. Объекты не перемещаются (поэтому указатели стабильны и cgo проще), поколений нет: ставка на escape analysis, который оставляет много короткоживущих объектов на стеке. Подсчёта ссылок нет. Сборка запускается автоматически по GOGC и GOMEMLIMIT, runtime.GC() нужен редко.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
Как работает сборщик мусора Go
Следующий вопрос
Как посмотреть решения escape analysis
Ещё по теме «Память, GC и pprof»
- Пул объектов как sync.Pool: симуляция на Go
- Статистика потока чисел без хранения на Go
- Escape analysis: что попадёт в кучу
- Что значит GOGC=100
- GOMEMLIMIT в контейнере
- inuse_space и alloc_space в pprof
- Почему fmt.Println вызывает аллокации
- Инструменты диагностики Go