【问题标题】:Can allocation tracker or heap analyzer help in tracing 'bitmap size exceeds VM budget' error?分配跟踪器或堆分析器能否帮助跟踪“位图大小超出 VM 预算”错误?
【发布时间】:2012-04-11 02:28:07
【问题描述】:

我在追踪“位图大小超出 VM 预算”错误时遇到了很大的问题。我查看了其他问题,并尝试了所有建议(释放资源,使用 bitmap.recycle() 并将变量、位图、画布设置为 null 当活动被破坏或视图从窗口https://stackoverflow.com/a/6779448/571143 分离时,也试图摆脱' this' 上下文并使用了 this.getAplicationContext())。

我遇到的问题不是位图太大而无法加载。一开始一切正常,但在当前活动多次重复更改后,我收到此错误(在设备上发生的活动更改比在模拟器上多得多)。

那么,回到我的问题,有没有办法使用分配跟踪器或堆分析器来引导我朝着正确的方向前进?在这些工具中没有“位图分配”的痕迹,只有很小的(大部分小于 1kb)分配。我已经读过这个:http://android-developers.blogspot.com/2009/02/track-memory-allocations.html

我知道我做错了什么,因为位图没有解除分配,但我正在处理的项目相当大,由一群人制作,所以手工分析所有内容将是最后的手段也非常耗时。

在这种情况下,我将不胜感激有关这些工具的任何提示。

干杯, 卡曼

【问题讨论】:

    标签: android memory-management memory-leaks bitmap android-canvas


    【解决方案1】:

    您已经发现它存在某种内存泄漏。如果您还没有,请确保您不只是在缓存中累积位图而不清除它。其他可能(和更微妙)的问题包括具有引用活动或上下文的长时间运行的任务,或者使用长时间运行的任务或单例注册侦听器的活动。

    您可以使用 Eclipse 内存分析器http://www.eclipse.org/mat/ 工具来跟踪正在保存的引用类型。它在 2.x 手机上有点棘手,因为位图是在本机内存中分配的,不会出现在您的 VM 堆转储中。您仍会看到位图,但不会以实际占用的大小列出它们。您可以通过尝试比较首次打开应用程序时的位图对象数与开始大量新活动后的位图对象数来解决此问题。

    有关调试这些问题和使用相关工具的精彩演讲,请参阅 google IO 演讲:http://www.youtube.com/watch?feature=player_embedded&v=_CruQY55HOk

    【讨论】:

    • 当我尝试分析 hprof 转储时,我在分析器中遇到了以下异常(我已经下载了最新版本):“打开堆转储 'dump.hprof' 时出错。请检查错误日志以进一步了解详细信息。打开堆转储“dump.hprof”时出错。有关详细信息,请查看错误日志。未知的 HPROF 版本(JAVA PROFILE 1.0.3)(java.io.IOException)未知的 HPROF 版本(JAVA PROFILE 1.0.3)“跨度>
    • 好的,我找到了这个:stackoverflow.com/questions/6219049/error-openning-hprof-file 解决方案
    • 是的,它的 hprof-conv filename.hprof targetname.hprof 其中 hprof-conv 是 sdk 中的一个工具。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 2012-08-19
    相关资源
    最近更新 更多