ByteBuffer =垃圾收集器垃圾邮件

时间:2015-03-21 20:07:20

标签: java android bitmap garbage-collection

几天前,我得到了solution检查具有config_alpha_8的两个位图之间的冲突。但是在使用它时我注意到我的应用程序开始变得很奇怪,当我检查日志时我注意到垃圾收集器每毫秒发送垃圾邮件

enter image description here

我尝试删除几行,并找出导致垃圾收集器进行炒作的原因是这些行:

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();
}

为什么呢?我该怎么办才能让它停下来?

1 个答案:

答案 0 :(得分:1)

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