Хотя я несколько удивлен тем, что у вас есть проблемы с производительностью при выделении только 2000 объектов, я сожалею, что не существует простого решения ваших проблем.Java, так как в ней отсутствуют типы структур C / C #, не очень эффективный язык в этом случае использования по сравнению с этими языками.Есть 3 решения для вашей проблемы.
1) Предварительно выделите объекты, прежде чем они понадобятся.Хотя это работает, это не очень хорошее решение, так как вы должны вручную возвращать неиспользуемые объекты в пул предварительно выделенных объектов.
2) Учитывая, что GLParticle - это небольшой объект (56 байт), его можно переписать, если использование позволяетэто, как класс GLParticles, который хранит данные для фиксированного количества объектов GLParticle.
class GLParticles {
private static final float u = 480f, v = 504f;
private GLSpriteSheet[] images;
private float[] x, y, vX, vY, alpha, alphaStep;
private boolean[] isDead;
private long[] startTime, lifeTime;
GLParticles( int size ) {
// allocate arrays here...
}
}
Это и более экономно, и намного быстрее для выделения (и сбора).
3) Попробуйтеоптимизировать размер детского и потокового локальных пулов GC, если они есть у используемой JVM.