ByteBuffer=垃圾收集器垃圾邮件

ByteBuffer=Garbage collector spam

几天前我得到了一个 检查两个具有 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();
}

为什么?我该怎么做才能让它停止?

您正在分配大的连续内存块(即 byte[])。根据图像的大小,这可能会占用大量可用堆。 如果您要进行大量此类操作,可能值得考虑合并 byte[] 个固定大小的实例以供重用。