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 –