美文网首页
Android内存检测工具

Android内存检测工具

作者: 杰奎琳子 | 来源:发表于2020-07-02 11:02 被阅读0次

什么是内存泄漏?

在运行的程序中,如果一个无法访问的对象仍然占用着内存空间,即为此对象造成了内存泄漏

垃圾回收(GC)机制:

当垃圾回收运行时,虚拟机首先会识别GC Root。GC Root 是一个可以从堆外部访问的对象,它可以是本地变量或运行中的线程等。虚拟机会识别所有可以从GC Root访问的对象,它们将会被保留,而其他无法从GC Root访问的对象,则会被认为垃圾并回收掉。

一、通过Memory Profiler检测内存泄漏

打开 Memory Profiler,选中MEMORY ,进入MEMORY视图,

点击下图所示按钮,保存Heap Dump:

1.1、Activity 和 Fragment 内存泄漏检测

Heap Dump 加载完成后,勾选 “Activity/Fragment Leaks” 选框:

此时如果有检查到 Activity 或 Fragment 的泄漏,就会在界面中显示出来:

需要注意的是:

针对 Fragment 有个特别的情况: 如果您载入的 Heap Dump 的时机,刚好介于 Fragment 被创建和被使用的时间之间,就会造成 Memory Profiler 误报;相同情况也会发生在 Fragment 被缓存但是没有被复用的时候

1.2、通过包名筛选来查看APP内其他内存泄漏的地方

选择Arrange by package :选择对应包名,查看可能存在内存泄漏的地方

① :选择包名筛选

② :点击LeakTestActivity$1 查看LeakedActivity内存泄漏的地方

③ :右键,跳转到发生内存泄漏源码的地方

1.3、通过观察 MEMORY 内存图标趋势判断是否发生内存泄漏

可以通过横竖屏切换,或者多执行几次可能发生内存泄漏的代码,通过观察MEMORY 轨迹趋势,如果内存走向是增加的,则肯定发生了内存泄漏,如下图:

查看堆和内存分配:

https://developer.android.com/studio/profile/memory-profiler?utm_source=android-studio#capture-heap-dump

二、HeapView 使用

启动:Sdk/tools/monitor 启动Monitor。端口冲突的话可以先关闭AS

A:打开DDMS视图,

B:选择Heap窗口

C:选择对应包名,点击Heap 按钮

D:点击Heap按钮

E:Cause GC 更新数据

内存详情

每一列含义:

点击data object行时,可以看到如下的柱状图

横坐标是对象的内存大小,这些值随着不同对象是不同的,纵坐标是在某个内存大小上的对象的数量

2.1 HeapView使用场景:

Heap Viewer中的数值会自动在每次发生GC时会自动更新。

2.2 内存泄漏检查

在需要检测的用例执行后,手动点击 按钮,触发GC,然后观察 data object 一栏的 Total Size (也可以观察Heap Size/Allocated内存的情况) ,看看内存会不会恢复到一个稳定的值,多次操作后,只要这个值稳定,说明没有内存泄漏。

如果每次GC后值都在增长,则说明有内存泄漏的可能性

2.3 内存抖动检查

内存抖动会伴随着频繁的GC。只需要开启Heap View,观察数据就行了。

如果发生内存抖动,会发现数据在短时间内频繁更新

此部分参考:https://blog.csdn.net/zhangfei2018/article/details/49154479

三、LeakCanary检查内存泄漏

添加依赖:

debugImplementation 'com.squareup.leakcanary:leakcanary-android:1.5.4'

releaseImplementation'com.squareup.leakcanary:leakcanary-android-no-op:1.5.4'

Application中初始化:

这样就能检测Activity的内存泄漏了,当然Fragment或者其他的内存泄漏是检测不到的。

如果需要检查Fragment内存泄漏,需要使用RefWatcher来监控,修改如下:

在Application中提供一个全局的RefWatcher 对象,然后在Fragment调用如下:

更多内存分析方式:

dump文件分析、MAT分析

崩溃检测

Monkey 检测ANR和Crash

相关文章

  • Android内存泄漏检测和定位

    内存泄漏检测工具 Profiler 其实Android studio自带的 Profiler 是不错的,可以很直观...

  • LeakCanary 源码解析

    LeakCanary 是由 Square 开源的针对 Android 和 Java 的内存泄漏检测工具。 使用 L...

  • Android内存泄漏检测和定位

    建议阅读Android常见内存泄漏这篇文章,本文的例子来源于文章中的内存泄漏典型例子 内存泄漏检测工具 Profi...

  • Android内存泄漏检测和定位

    这篇文章,本文的例子来源于文章中的内存泄漏典型例子 内存泄漏检测工具 Profiler 其实Android stu...

  • leakcanary2.0原理分析

    1 问题描述 1.1 背景 Android内存泄漏检测工具--leakcanary,想必是众所周知。关于具体用法本...

  • Android内存检测工具

    什么是内存泄漏? 在运行的程序中,如果一个无法访问的对象仍然占用着内存空间,即为此对象造成了内存泄漏 垃圾回收(G...

  • 内存泄露和LeakCanary的故事

    新鲜文章请关注微信公众号: JueCode 今天我们来聊一聊Android中的内存泄露和内存泄露的检测工具Leak...

  • LeakCanary 原理分析

    LeakCanary 是Android开发中常用的内存泄漏检测工具。我们以Activity的监控为例,分析下是如何...

  • Android Native内存泄露检测

    Android Studio没有提供直接的Native层的内存泄露检测工具,但我们仍可以通过开源工具进行动态检测和...

  • LeakCanary使用和工作原理分析

    LeakCanary是一个非常受欢迎的android内存泄漏检测工具,只需要在项目中引入即可 debugImple...

网友评论

      本文标题:Android内存检测工具

      本文链接:https://www.haomeiwen.com/subject/xuylqktx.html