0
我使用浮动缓冲区作为在Android中进行opengl绘图所需的直接字节缓冲区。问题在于,在创建字节缓冲区时,GC变得疯狂 - 像在30s +疯狂一样。我创建了40x40顶点的网格,或者1600个顶点,或者4800个浮点。根据分析器,调用GC的罪魁祸首是ByteBuffer.allocateDirect。ByteBuffer allocateDirect需要很长时间
这是正常的或预计创建一个这样的大小的网格?它似乎很驯服。
缓冲区的init()代码如下:
public static FloatBuffer createFloatBuffer(int capacity) {
ByteBuffer vbb = ByteBuffer.allocateDirect(capacity * 4);
vbb.order(ByteOrder.nativeOrder());
return vbb.asFloatBuffer();
}
我一直在玩代码,忘了改回来。问题依然存在。跟踪日志是用allocateDirect()完成的,而不是分配() –
看看其他堆栈问题。不幸的是,这似乎并不适用于android。我没有看到DirectBuffer界面。所以基本上,你所说的是创建一堆较小的直接字节缓冲区而不是一个较大的缓冲区? –
不,我要说的是,在创建一个字节缓冲区后,您应该保留ByteBuffer对象,直到下次需要它为止。不要重复调用allocateDirect。 http://en.wikipedia.org/wiki/Object_pool_pattern –