Карточка Middle Память, GC и pprof обновлено
Как снизить нагрузку на GC
Вопрос
Назовите приёмы снижения аллокаций и нагрузки на GC.
Попробуйте сами
Ответьте про себя или вслух, потом откройте ответ и сверьтесь.
Показать ответ и разбор
Коротко
Предвыделять слайсы и мапы (make с ёмкостью), переиспользовать буферы (sync.Pool), избегать лишних конвертаций string/[]byte, strconv вместо fmt, значения вместо указателей в маленьких структурах, меньше указателей в больших структурах, не держать большие массивы через маленькие подслайсы.
Ответ
Предвыделять слайсы и мапы (make с ёмкостью), переиспользовать буферы (sync.Pool), избегать лишних конвертаций string/[]byte, strconv вместо fmt, значения вместо указателей в маленьких структурах, меньше указателей в больших структурах, не держать большие массивы через маленькие подслайсы.
Разбор
Сначала замер: -benchmem, heap-профиль alloc_space, GODEBUG=gctrace=1.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Ещё по теме «Память, GC и pprof»
- Пул объектов как sync.Pool: симуляция на Go
- Статистика потока чисел без хранения на Go
- Escape analysis: что попадёт в кучу
- Как работает сборщик мусора Go
- Какой сборщик мусора в Go
- Как посмотреть решения escape analysis
- Что значит GOGC=100
- GOMEMLIMIT в контейнере