当前位置:首页 > 内存 > 正文

mat分析内存泄漏(mat内存分析工具)

  • 内存
  • 2024-06-15 15:11:14
  • 7145

一、排查内存泄漏最简单和直观的方法内存泄漏肯定会严重影响用户体验。一些需要移除的资源和对象无法释放,导致手机内存浪费,应用程序使用速度变慢。
当然,首先我们有Google官方文档可供参考:
大多数博客方法也来源于此。总的来说,AndroidStudio的内存监控功能是用来监控应用程序主进程占用的内存,触发GC操作,然后观察内存使用情况。如果内存在使用过程中持续增加并且不再减少,则a.可能会出现内存泄漏的情况,需要导出内存分配的具体细节进行深入分析。
但实际上,检测是否存在内存泄漏问题是通过观察这条内存曲线的过去字段或者观察trace分配中分配的数据值的增长情况,其实是一个谜,因为内存泄漏经常发生发生。,但是GC仍然可以通过回收其他对象来创造空间,使得这个数据的变化本质上是看不见的,甚至是衰减的,所以我觉得这个方法是一样的,可以让你用手掌感受宝宝的体温,非常美妙。确定儿童是否发烧的测试不可靠且不准确。
那么底线就是这样的。我的方法非常简单直观,我信您很快就会学会!
首先我们来说一下终端命令:
该命令用于查询本进程占用内存的具体情况。通过这个命令可以知道内存的位置。目前的申请是。具体移动端占用的堆内存大小、浏览次数、操作次数等如下:
操作次数是一个非常重要的信息,它可以帮助我们快速检测内存泄漏。我们可以不断地进入和退出要测试的目标活动。如果我们在多次进入和退出后使用终端执行上面的语句来查询当前的内存状态,如果我们看到操作次数在增加。肯定是内存泄漏了!
发生内存泄漏,如何确定原因?
如下图,在AndroidStudio中启动内存跟踪,点击initGC,然后反复进入和退出发生内存泄漏的Activity。现在单击以创建内存文件。然后是AndroidStudio。将自动打开生成的.hprof文件。选择要转换为标准hrof文件的文件。
打开使用MAT工具创建的.hprof文件,然后单击下的图标以查看内存中的对象列表。
考虑到大内存泄漏是由于Activity被销毁但仍被其他对象保留造成的,所以我们先解决这个难题,直接搜索Activity,如下。发现Activity的版本数为3,与实际情况不符。显然这个操作会导致内存泄漏。查找其参考如图,凶手就是内存泄漏!
可以看到本例中的内存泄漏是由HandlerThread引起的,然后找到问题的位置,在适当的位置(如ondestroy)释放handler。
如下图:在AndroidStudio中打开创建好的hprof文件,右侧边栏会出现任务分析工具,点击执行图标,会出现分析结果播放就会知道哪些活动被泄露,以及谁引用了这些泄露的活动。
可以看到内存泄漏是AsyncHandler引起的,需要在activity生命周期结束时释放。
方案2不需要安装MAT工具,更方便~
如果有任何疑问,请留言,感谢您的阅读~~