В Go 1.27 появился size-specialized memory allocation — специальные пути выделения памяти для небольших объектов.
Что изменилось:
— аллокации объектов размером менее 80 байт могут стать быстрее на 20–30%;
— в программах с большим количеством аллокаций общий прирост может достигать 1%;
— максимальный эффект ожидается для объектов на 16 и 24 байта.
🔴 Почему это работает?
Раньше runtime использовал общий путь
mallocgc, которому нужно определить размер объекта, класс аллокации и дополнительные параметры.➡️ Теперь для часто встречающихся размеров есть специализированные функции. Они заранее знают размер объекта и могут:
— быстрее очищать память;
— не вычислять класс аллокации повторно;
— эффективнее выполнять служебные операции;
— использовать более короткий fast path.
Особенно часто такие размеры встречаются у структур, интерфейсов, строк и слайсов.
🔗 Ничего менять в коде не нужно. Чтобы получить улучшения, достаточно пересобрать приложение с Go 1.27.
При необходимости эксперимент можно отключить:
GOEXPERIMENT=nosizespecializedmalloc
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека Go-разработчика
#GoLive