代码之家  ›  专栏  ›  技术社区  ›  Quinn

如何在Java/Android中查找内存泄漏

  •  0
  • Quinn  · 技术社区  · 6 年前

    我在我们的一个应用程序中遇到了很多内存泄漏问题,不知道下一步该去哪里。我知道有人问过类似的问题,但没有人给出任何有用的答案。

    当我们在android studio中使用profiler时,它显示“本机”内存增长非常快,在使用该应用程序大约10-15分钟后,它将因内存泄漏而崩溃。

    我们的应用程序完全是用java和kotlin编写的,我已经查看了所有静态对象,或者是保存在可能不会被垃圾收集器收集的伴生对象中的对象,但是除了一些静态字符串之外,没有其他的,比如 TAG 用于日志记录。

    我们尝试使用leak canary,但它似乎没有发现任何内存泄漏,并一直告诉我们我们的应用程序很好。我甚至故意添加了一个漏洞,静态地保持android活动上下文,以确保漏洞金丝雀能够正常工作,而且确实有效。

    是否还有其他可能导致java代码内存泄漏的问题需要注意?我手上可能有什么东西导致了这一切?

    0 回复  |  直到 6 年前
        1
  •  1
  •   saeed foroughi    6 年前

    在Android Studio中,您可以通过按下dump Java heap按钮生成堆转储: Dump Java Heap Button

    在这里你可以看到哪个类使用了多少内存。例如,您可能会发现一个本应由垃圾收集器收集但没有收集的类。

    **更新: 正如你所说,问题在于本机内存分配,但我会保留这个答案,因为它可能会帮助其他人。