我在我的 android 服务中创建了一个位图对象的 hahsmap,使用 int 作为键。为此,我根据要求添加了动态创建的不同位图。我是否可以使用某些工具或以编程方式找到由于此哈希图(包括位图的大小)而添加到我的服务的 RAM/堆内存占用量。
如果有人以前在这方面工作过,请帮助!
我在我的 android 服务中创建了一个位图对象的 hahsmap,使用 int 作为键。为此,我根据要求添加了动态创建的不同位图。我是否可以使用某些工具或以编程方式找到由于此哈希图(包括位图的大小)而添加到我的服务的 RAM/堆内存占用量。
如果有人以前在这方面工作过,请帮助!
好吧,位图非常简单,因为它们是位图,大量内存,如果您使用 rgb8 格式(每种颜色 1 个字节),那么它是高度 * 宽度 * 3 字节大 + Java 的开销(~24 字节是安全的假设)+课堂上的其他东西(至少8 *方法计数)
无论如何,位图将是一件大事。
hasmap 本身大约是 16 * 里面的东西大 + Java 的开销 + 类中的其他东西。
Java 很难,因为没有所有权的概念,也没有大小(一切都是参考),所以你需要小心不要重复计算东西......
无论如何,杀手是位图,其余的小到可以忽略。
正如我所想:
final int getAllocationByteCount()
Returns the size of the allocated memory used to store this bitmap's pixels.
final int getByteCount()
Returns the minimum number of bytes that can be used to store this bitmap's pixels.
从
http://developer.android.com/reference/android/graphics/Bitmap.html
您可以遍历 Map 中的值并计算每个位图的内存
HashMap<?, Bitmap> bitmaps;
long total = 0;
for (Bitmap bmp : bitmaps.values()) {
total += bmp.getRowBytes() * bmp.getHeight() * 4; // 4 is bytes per pixel in ARGB_8888 mode
}
您可以转储堆并使用 Eclipse 内存分析器 (MAT) 来获取您感兴趣的所有对象的大小