我在android服务中创建了一个位图对象的hahsmap,使用int作为键。为此,我根据需要添加动态创建的不同位图。 我可以通过这个散列图(包括位图的大小),使用某个工具或以编程方式找到添加到我的服务中的RAM /堆内存占用。
如果以前有人在这个地区工作过,请帮忙!
答案 0 :(得分:5)
使用位图很简单,因为它们是位图,大量的内存,如果你使用的是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
答案 1 :(得分:1)
您可以在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
}
答案 2 :(得分:0)
您可以转储堆并使用Eclipse内存分析器(MAT)来获取您感兴趣的所有对象的大小