java - ByteBuffer=垃圾收集器垃圾邮件

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

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

最佳答案

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

关于java - ByteBuffer=垃圾收集器垃圾邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29187472/

相关文章:

android - Android 中加载、回收和消除位图以提高内存效率

java - 是否有等效于 java.util.Properties 的集合?

java - 像setter这样简单的东西,用接口(interface)好还是抽象类好?

java - 如何根据提供的 HTML 从弹出窗口中定位元素?

java - HashSet vs ArrayList CPU 使用率高

java - 在 Libgdx 中绘制并旋转等边三角形

java - 移动拖放 ImageButton 时 ImageButtons 被压扁

android - Fabric for Android/Eclipse - 无法登录

c# - 位图克隆问题

.net - C++ 和 Windows 窗体中的数组