android - 如何使用探查器查找内存泄漏

标签 android memory-leaks profiling rx-java rx-android

我已经转储了大量内存,并发现肯定存在内存泄漏。如果您查看屏幕截图,您会看到只有一个 fragment ,但有 9 个相同类型的演示者。应该只有一个。当我检查其中一个演示者实例时,探查器会向我显示对演示者的引用。 这些都是 RxAndroid 方法的回调方法。我正在取消订阅 fragment 的 onDestroyView 中的所有那些。演示者实例仍未清理(如您所见)。

所以我想知道如何区分有效的(循环的、内部的)引用和有问题的引用(这导致对象没有被清理)。

有人可以指导我如何找出可能发现内存泄漏的位置吗?

此转储是在触发 GC 后生成的! android memory dump

最佳答案

你应该试试 Leakcanary 来自 Square 的开源库,用于检测内存泄漏。它使您免于做大量的手动工作,例如

  • 获取 hprof 转储
  • 分析 hprof 转储以识别泄漏
  • 找到导致泄漏的引用
  • 修复并重复上述步骤

我有一个关于内存泄漏和 Leakcanary 的博客,you can find it here

关于android - 如何使用探查器查找内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47869616/

相关文章:

wolfram-mathematica - 分析 Mathematica 代码

android - 不能再添加 Android 平台和构建 ionic 项目了吗?

android - NavigationDrawer 提示动画(如 Google Currents)

android - Kotlin 协程执行令人困惑 : where to call await()?

objective-c - NSEvent addLocalMonitorForEventsMatchingMask 内存泄漏

java - Thread.sleep 和 BufferedReader.readLine 在我的 java tcp 服务器中使用最多的 cpu 周期。为什么?

java - 如何将音频文件发送到android中的服务器?

c - 为什么 valgrind 报告此 mini-xml 代码中存在泄漏?

c# - Windows 应用商店应用程序大量使用 RAM/内存泄漏

c++ - 跟踪每个函数的内存分配