Конечно, ваша производительность зависит от используемого распределителя. Но вы профилировали GC и видели, что это не большая проблема. Кроме того, одной из сильных сторон GC является быстрое распределение за счет более медленного сбора.
Я думаю, что у вас есть проблемы с результирующей фрагментацией, из-за которой шаблон доступа к памяти становится проблематичным для процессора, поскольку может потребоваться слишком часто делать недействительным свой кэш. Большинство алгоритмов GC не освобождают пространство оптимальным образом.
Поскольку ваш рабочий набор ограничен и предсказуем, вы можете использовать пул объектов, который выделяется заранее. Вы также можете использовать подсчет ссылок, чтобы избежать ручного управления памятью. Технически это все еще GC, но не в здравом смысле GC.
Тем не менее, я не думаю, что производительность сильно зависит от того, как вы управляете памятью, но как вы на самом деле используете ее, обращаетесь к ней. Скорее всего, ваш профилировщик имеет определенный ответ.