几天前,我收到了一个solution,用来检查带有config_alpha_8的两个位图之间的碰撞。但使用它时,我注意到我的应用程序开始出现奇怪的滞后,当我查看日志时,我注意到垃圾收集器每毫秒就会垃圾发送一次。

我试着删除了几行代码,并发现导致垃圾收集器大肆宣传的原因不是这些行:
byte[] pixelData = getPixels(bitmap1);
byte[] pixelData2 = getPixels(bitmap2);它称这个函数为:
public byte[] getPixels(Bitmap bmp) {
int bytes = bmp.getRowBytes() * bmp.getHeight();
ByteBuffer buffer = ByteBuffer.allocate(bytes);
bmp.copyPixelsToBuffer(buffer);
return buffer.array();
}为什么?我该怎么做才能让它停下来?
发布于 2015-03-21 20:50:53
您正在分配大的连续内存块(即byte[])。根据映像的大小,这可能占到可用堆的很大一部分。如果您要执行许多这类操作,那么可能值得考虑将固定大小的byte[]实例池起来重用。
https://stackoverflow.com/questions/29187472
复制相似问题