测量(Android)堆碎片?

4
我们有一个应用程序,内存中有许多位图。它一直出现故障,显示错误信息:
java.lang.OutOfMemoryError: bitmap size exceeds VM budget

错误。我们可能真的使用了太多内存;我们可能在泄漏内存;也可能我们没有做错什么,堆碎片是致命的问题。(由于Android的垃圾回收器不会重新定位活动块,我们可能有几兆字节可用但无法分配50K以上的空间)。

是否有办法排除碎片问题?我已经寻找类似maxAvail/memAvail的东西,但没有发现任何适当的内容。


请查看https://dev59.com/4HI-5IYBdhLWcg3wO1vl#5493182。 - Torid
谢谢,@Torid。如果确实是我们使用了太多的内存,那么这种方法可能是我们必须采取的...不过,目前为止,我们仍在努力弄清楚我们遇到了哪个问题。 - Jon Shemitz
1个回答

1

我建议你通过MAT来检查堆。Eclipse Memory Analyzer可以帮助你确定你提出的问题中哪些是真正存在的。

在Google I/O 2011上有一个关于内存管理和调试基础知识的演讲。你可以在这里在线观看:http://www.youtube.com/watch?v=_CruQY55HOk&feature=relmfu


谢谢。我会尽快回复,并且要么接受你的答案,要么发表进一步的评论。 - Jon Shemitz
2
当MAT显示您使用了32或64中的5M,并且在2M分配上出现OOM时,很难得出除碎片化之外的结论。 - Jon Shemitz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接