【问题标题】:How to find out the memory footprint of my Android App?如何找出我的 Android 应用程序的内存占用?
【发布时间】:2010-02-22 15:04:56
【问题描述】:

嗯,标题已经说明了。

知道还有多少内存可用也很方便。 我正在编写一个内存不足的应用程序,它往往会随机崩溃(在本机代码中), 我怀疑它内存不足。

【问题讨论】:

    标签: android memory android-ndk


    【解决方案1】:

    我认为您很难找到比这个主题更全面的答案:
    How do I discover memory usage of my application in Android?

    【讨论】:

      【解决方案2】:

      我同意 hackbod 的回复。据我了解,您的应用程序不会崩溃,而是会被杀死。 你可能会觉得这个讨论很有趣
      Is there a need to check for NULL after allocating memory, when kernel uses overcommit memory.
      我想有一些回调知道内存不足的情况(onLowMemory()),你可以用它来识别内存不足的情况,不过我还没有尝试过。

      【讨论】:

        【解决方案3】:

        Android 上的应用程序通常不会因为内存不足而崩溃。如果您使用大量内存,您可能会导致大多数其他应用程序被杀死。如果你继续使用内存,你可能会导致系统也杀死你的应用程序(不是崩溃,只是杀死它),尽管在此之前你可能会达到明显的分页点。

        如果您正在处理本机代码,则更有可能的解释是您在某处损坏了内存。

        【讨论】:

        • 我目前在我的应用程序中看到一个问题,即整个手机都崩溃了。就在手机重新启动之前,我看到有关内存分配失败的消息。当没有要分配的内存时,下一个尝试分配的幸运应用程序会受到打击,如果它是核心应用程序,那么它就会被操作系统熄灭。我只是希望有办法在这种情况发生之前抓住它。
        • 不应允许应用程序使操作系统崩溃。如果您可以使用示例应用程序和重现问题的步骤(以及有关它正在崩溃的设备的详细信息,尽管最好是使模拟器崩溃的步骤)在错误跟踪器上提交错误,那就太好了。
        【解决方案4】:

        您可能想要捕获 OutOfMemoryException,然后调用 System.gc() 来执行手动垃圾回收,然后重试失败的那段代码。您或许可以使用 JNI 的本机异常来检测 C++ 代码何时因内存不足而失败,或者进行预测。

        【讨论】:

        • 我认为这真的应该是最后的措施。不应该依赖 System.gc()!
        【解决方案5】:

        检查 http://kohlerm.blogspot.com/2010/02/android-memory-usage-analysis-slides.html 找出哪些 java 对象使用的内存最多

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-10-09
          • 1970-01-01
          • 2017-09-01
          • 2012-03-25
          • 1970-01-01
          • 2011-07-16
          相关资源
          最近更新 更多