如何在Android Studio中读取探查器.hprof内存堆转储?

我正拼命寻找内存泄漏,我想知道如何读取内存堆转储:

如何在Android Studio中读取探查器.hprof内存堆转储?

如何在Android Studio中读取探查器.hprof内存堆转储?

  • 例如,这是否意味着Mainactivity处于活动状态两次?或者只是它两次在后堆栈中?
  • 为什么我的TrackingService被叫两次?它会在启动时被激活,然后基本上被应用程序的其余部分遗忘。

  • ChooseLoginRegistrationactivity怎么了?是在后堆栈中3到5次吗? Lambda这两个奇怪的活动是什么? ChooseLoginRegistrationactivity总是在'startactivity()`之后以finish()结尾,它甚至应该在这里弹出吗?

  • 当我在某个活动上调用finish()时,分配给该活动的内存会在garbage collector的下一次迭代中释放吗?因为当我在gc中手动调用profiler时,没有释放内存,等待也无济于事。进入已释放的智能手机桌面(约占我应用程序内存的50%),再返回该应用程序并没有收回内存。

qqqwwweebao 回答:如何在Android Studio中读取探查器.hprof内存堆转储?

有点晚了,但是使用Eclipse MAT可能会有用。您可以从Android Studio Profiler创建一个堆转储,并将其转换为标准.hprof,以便将其导入Eclipse MAT。

Android \ Sdk \ platform-tools 中(要访问可用于转换转储的hprof-conv工具),请打开终端并输入命令

hprof-conv AS-name.hprof EclipseMAT-name.hprof

这将使用给定的 EclipseMAT名称名称生成一个转换后的文件,您可以使用该文件将适当的标准堆转储导入Eclipse MAT。 导入MAT之后,您可以查看给定堆中的内存概述,甚至可以获取泄漏可疑事件的自定义报告,这可能使您更接近那些可怕的OOM错误的根源。

LeakCanary对于发现这些讨厌的错误也很有用。

希望这可以帮助您和其他任何人查找内存错误。

本文链接:https://www.f2er.com/3120070.html

大家都在问