jemalloc
впервые появился для FreeBSD, детища одного «Джейсона Эванса», отсюда и «je». Я бы высмеял его за эгоистичность, если бы я не написал операционную систему под названием paxos
: -)
См. этот PDF для полной информации. Это официальный документ, подробно описывающий работу алгоритмов.
Основным преимуществом является масштабируемость в многопроцессорных и многопоточных системах, достигаемая, в частности, за счет использования нескольких арен (фрагментов необработанной памяти, из которой производятся выделения).
В однопоточных ситуациях нет реальной выгоды для нескольких арен, поэтому используется одна арена.
Однако в многопоточных ситуациях создается много арен (в четыре раза больше арен, чем процессоров), и потоки назначаются этим аренам в циклическом порядке.
Это означает, что конкуренция за блокировку может быть уменьшена, поскольку, хотя несколько потоков могут одновременно вызывать malloc
или free
, они будут бороться только в том случае, если они будут использовать одну и ту же арену. Два потока с разными аренами не будут влиять друг на друга.
Кроме того, jemalloc
пытается оптимизировать локальность кэша, поскольку процесс извлечения данных из ОЗУ происходит намного медленнее, чем использование данных, уже находящихся в кэш-памяти ЦП (в принципе не отличается от разницы между быстрой выборкой из ОЗУ и медленной выборкой). с диска). С этой целью он сначала пытается минимизировать общее использование памяти, поскольку это, скорее всего, гарантирует, что весь рабочий набор приложения находится в кеше.
И там, где это не может быть достигнуто, он пытается обеспечить непрерывное распределение, поскольку память, выделенная вместе, имеет тенденцию использоваться вместе.
Из официального документа видно, что эти стратегии обеспечивают производительность, аналогичную лучшим на сегодняшний день алгоритмам для однопоточного использования, и предлагают улучшения для многопоточного использования.