首页 > 解决方案 > 如何在 Java / Android 中查找内存泄漏

问题描述

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

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

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

我们尝试使用泄漏金丝雀,但它似乎找不到任何内存泄漏并不断告诉我们我们的应用程序很好。我什至故意通过静态保持一个 android 活动上下文来添加一个泄漏,只是为了确保泄漏金丝雀正在工作,而且确实如此。

还有其他我应该注意的可能会导致我的 java 代码内存泄漏的事情吗?我可能持有的任何特定对象导致此问题?

标签: javaandroidkotlinmemory-leaks

解决方案


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

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

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


推荐阅读