【问题标题】:android memory leak detection安卓内存泄漏检测
【发布时间】:2012-04-07 19:52:47
【问题描述】:

ADT eclipse 插件会在我运行 android 应用程序时报告内存泄漏(当它有泄漏时)。 VM(或插件)如何在运行时检测内存泄漏?这背后的检测算法是什么?另外,生产环境是否开启了检测功能?

【问题讨论】:

  • 是什么让你产生了这个想法?没有“内存泄漏检测”。那太棒了:)
  • 您可以从 logcat 中看到“您的应用程序正在泄漏”之类的信息以及相关的堆栈跟踪。我想它可能无法捕获所有必要的泄漏,但对于某些人来说,它实际上可以。
  • 但这是个例外。它可能与内存泄漏无关。您能否提供这样的堆栈跟踪以进行澄清?没见过这个。然而,系统/垃圾收集器无法检测到内存泄漏,因为 GC 无法知道引用是否导致泄漏,因为它无法知道应该释放引用的对象。这是不可能的。只有开发者才能知道
  • 这不是内存泄漏检测。每个视图都需要一个上下文来“生活”。在您给定的示例中,上下文被破坏,因此您得到一个异常(在方向更改后,将创建一个引用新创建的活动的新对话框)。这篇文章的结论也不正确。 “窗口泄漏”不会导致活动的内存泄漏
  • 你可以简单地测试一下。通过另一个类中的静态 WeakReference 引用您的活动。在导致异常之前设置 WeakReference。然后更改方向(这将导致异常)并检查 WeakReference。您的 WeakReference 引用的“旧”活动将为空(也许您必须先调用 System.gc() 才能检查 GC 是否尚未运行)。最后没有内存泄漏检测,因为不能有上面评论中描述的一个

标签: android eclipse memory-leaks


【解决方案1】:

没有检测到系统处理的内存泄漏。解释在问题的cmets中

【讨论】:

    猜你喜欢
    • 2011-07-04
    • 2015-02-26
    • 2012-07-16
    • 1970-01-01
    相关资源
    最近更新 更多