频繁调用垃圾回收器的旋转Android MatrixMultiply

频繁调用垃圾回收器的旋转Android MatrixMultiply,android,garbage-collection,heap,Android,Garbage Collection,Heap,你好 我正在Android上编写一个OpenGL应用程序。我有100个游戏对象,当我更新它们的位置、速度或加速度时,它们执行得很好。在我的游戏循环中,我还希望能够在每次更新游戏对象时调用“偏航”(或俯仰或滚动)方法。问题是,我正在导致垃圾收集器对LogCat的GC_并发打印输出语句发疯 在我的偏航方法中,我有以下调用 reAlignVectors(); //No heap allocations in this method that I wrote Matrix.rotateM(rotatio

你好

我正在Android上编写一个OpenGL应用程序。我有100个游戏对象,当我更新它们的位置、速度或加速度时,它们执行得很好。在我的游戏循环中,我还希望能够在每次更新游戏对象时调用“偏航”(或俯仰或滚动)方法。问题是,我正在导致垃圾收集器对LogCat的GC_并发打印输出语句发疯

在我的偏航方法中,我有以下调用

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是否在堆中重新分配内存吗?那是我唯一能猜到的吗?如果是这样的话,有没有人知道如何防止这种情况或解决我所处的情况


谢谢您的帮助。

您查看了DDMS分配跟踪程序了吗?也许能让你知道所有的垃圾是从哪里来的。我不认为这些矩阵函数会产生分配,但我没有证据。可能想把重新排列的矢量源也放上去,只是为了让更多的人看到它。嗨,蒂姆,谢谢你的提醒。我还没有试过DDMS。我只是试着注释了代码的某些部分,我发现垃圾收集器只有在我离开矩阵时才会变得疯狂。。。换句话说,我注释掉了对Matrix.rotateM的两个调用,垃圾收集器更能控制。看起来你可能是对的:太棒了,谢谢。我刚才看到了。我现在必须弄清楚他们从哪里得到结果矩阵。我假设它可以和我的源矩阵一样。再次感谢你的帮助!晚安