Добрый день,
Я пишу приложение Open GL на Android.У меня есть 100 игровых объектов, которые прекрасно работают, когда я обновляю их положение, скорость или ускорение.В моем игровом цикле я также хочу иметь возможность вызывать метод "рыскание" (или тангаж или крен) на каждой итерации обновления для игрового объекта.Проблема в том, что я заставляю сборщик мусора сходить с ума от операторов GC_CONCURRENT, выводимых на LogCat.
В моем методе рыскания у меня есть следующие вызовы ...
reAlignVectors(); //No heap allocations in this method that I wrote
Matrix.rotateM(rotationArray,0,angle,0,1,0); //RotationArray is a float[16]
Matrix.setIdentityM(rotationalComputeArray,0); //Another float[16]
Matrix.rotateM(rotationalComputeArray,0,angle,upVector.x, upvector.y, upvector.z);
Matrix.multiplyMV(lookvector...
Matrix.multiplyMV(rightvector..
Я закомментировал код, в котором я бы вызвал метод yaw, и у меня почти нет вызовов к сборщику мусора (GC), и 100 объектов легко перемещаются по миру без заметной разницы.Когда я раскомментирую зевок, я получаю значительное снижение производительности.Объекты движутся нестабильно, и я получаю все вызовы GC.
Кто-нибудь знает, перераспределяет ли память Matrix.multiplyMV или Matrix.rotateM в куче?Чтобы швы были единственной вещью, о которой я мог догадаться?Если так, кто-нибудь знает способ предотвратить это или исправить ситуацию, в которой я нахожусь?
Спасибо за вашу помощь.