Как отмечали люди - GC быстрее выделяется (потому что он просто дает вам следующий блок в своем списке), но медленнее в целом (потому что он должен регулярно сжимать кучу, чтобы распределение выполнялось быстро).
так что - пойти на компромиссное решение (которое на самом деле чертовски хорошо):
Вы создаете свои собственные кучи, по одному для каждого размера объекта, который вы обычно выделяете (или 4-байтового, 8-байтового, 16-байтового, 32-байтового и т. Д.), А затем, когда вам нужен новый фрагмент памяти, вы получаете последний «блок» в соответствующей куче. Поскольку вы предварительно выделяете из этих куч, все, что вам нужно сделать при распределении, это захватить следующий свободный блок. Это работает лучше, чем стандартный распределитель, потому что вы счастливо тратите память - если вы хотите выделить 12 байтов, вы потеряете целый 16-байтовый блок из 16-байтовой кучи. Вы сохраняете растровое изображение использованных v свободных блоков, чтобы вы могли быстро распределить ресурсы, не тратя много памяти и не сокращая их.
Кроме того, поскольку вы работаете с несколькими кучами, высокопараллельные системы работают намного лучше, поскольку вам не нужно блокировать их так часто (т.е. у вас есть несколько блокировок для каждой кучи, так что вы не получите столько конфликтов)
Попробуйте - мы использовали его для замены стандартной кучи в очень интенсивном приложении, производительность значительно выросла.
КСТАТИ. Причина, по которой стандартные распределители работают медленно, заключается в том, что они стараются не тратить память - поэтому, если вы выделите 5 байтов, 7 байтов и 32 байта из стандартной кучи, они сохранят эти «границы». В следующий раз, когда вам нужно выделить, он пройдет через тех, кто ищет достаточно места, чтобы дать вам то, что вы просили. Это хорошо работает для систем с малым объемом памяти, но вам нужно только посмотреть, сколько памяти использует большинство приложений сегодня, чтобы увидеть, что системы GC идут другим путем, и попытаться распределить ресурсы как можно быстрее, не заботясь об объеме памяти. впустую.