Итак, у меня есть частицы в моей игре-симуляторе «Падающий песок», которые хранятся в массиве (сетке), и некоторые из этих частиц содержат такую информацию, как id (вода, песок и т. д.), температура и RandomNumberGenerator.
Что я делаю для хранения этой информации, я создаю массив:
temperatureGrid[]=new byte[w*h];
И я храню там температуру каждой частицы (если она у них есть), а не что-то вроде этого:
public particle(int x, int y, int temperature, int rng){}
Интересно, какой из них быстрее (Примечание: производительность очень важна, я знаю, что в основном я должен выбирать читабельность)
Хранение всех данных в массиве байтов происходит быстрее по ряду причин, включая локальность кеша, меньшую косвенность.
Использование объектов позволяет создавать более читаемый и удобный для сопровождения код. Если вы используете Java, это означает, что производительность не вызывает беспокойства. Тем не менее, JVM создает очень быстрые программы. Единственным слабым местом является высокое использование памяти, что оказывает давление на кэши ЦП и приводит к частым сборкам мусора, что замедляет выполнение программы. Чтобы повысить производительность там, где это важно, можно использовать такие приемы, как сокращение выделения памяти и повторное использование объектов.
Это сводится к SoA против AoS, по-видимому, в большинстве игр используется структура массивов вместо массива структур, что вы пытаетесь сделать здесь.