几天前我收到了一个 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();
}
为什么?我该怎么做才能让它停止?
最佳答案
您正在分配大的连续内存块(即 byte[]
)。根据图像的大小,这可能会占用大量可用堆。
如果您要执行大量此类操作,可能值得考虑将固定大小的 byte[]
实例合并以供重用。
关于java - ByteBuffer=垃圾收集器垃圾邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29187472/