
文章插图
7.2 预防内存抖动的方法
- 尽量避免在循环体中创建对象
- 尽量不要在自定义 View 的 onDraw 方法中创建对象 , 因为这个方法会被频繁调用
- 对于能够复用的对象 , 可以考虑使用对象池把它们缓存起来
Profiler 是 Android Studio 为我们提供的性能分析工具 , 它包含了 CPU、内存、网络以及电量的分析信息 , 而 Memory Profiler 则是 Profiler 中的其中一个版块 。
打开 Profiler 有下面三种方式 。
- View > Tool windows > Android Profiler
- 下方的 Profiler 标签
- 双击 shift 搜索 profiler

文章插图
8.1.2 Profiler 高级选项
打开了高级选项后 , 我们在 Memory Profiler 中就能看到用一个白色垃圾桶表示的 GC 动作 。
打开 Profiler 的方式:Run > Edit Configucation > Profiling > Enable advanced profiling
8.2 Memory Profiler 简介
Memory Profiler 是 Profiler 的其中一个功能 , 点击 Profiler 中蓝色的 Memory 面板 , 我们就进入了 Memory Profiler 界面 。
8.3 堆转储
在堆转储(Dump Java Heap)面板中有 Instance View(实例视图)面板 , Instance View 面板的下方有 References 和 Bitmap Preview 两个面板 , 通过 Bitmap Preview , 我们能查看该 Bitmap 对应的图片是哪一张 , 通过这种方式 , 很容易就能找到图片导致的内存问题 。
要注意的是 , Bitmap Preview 功能只有在 7.1 及以下版本的设备中才能使用 。

文章插图
8.4 查看内存分配详情
在 7.1 及以下版本的设备中 , 可以通过 Record 按钮记录一段时间内的内存分配情况 。
而在 8.0 及以上版本的设别中 , 可以通过拖动时间线来查看一段时间内的内存分配情况 。
点击 Record 按钮后 , Profiler 会为我们记录一段时间内的内存分配情况 。在内存分配面板中 , 我们可以查看对象的分配的位置 , 比如下面的 Bitmap 就是在 onCreate 方法的 22 行创建的 。

文章插图
9. 什么是 MAT?9.1 MAT 介绍
对于内存泄漏问题 , Memory Profiler 只能给我们提供一个简单的分析 , 不能够帮我们确认具体发生问题的地方 。
而 MAT 就可以帮我们做到这一点 , MAT 的全称是 Memory Analyzer Tool , 它是一款功能强大的 Java 堆内存分析工具 , 可以用于查找内存泄漏以及查看内存消耗情况 。
9.2 MAT 使用步骤
要想通过 MAT 分析内存泄漏 , 我们做下面几件事情 。
- 到 MAT 的官网下载 MAT 。
- 使用 Memory Profiler 的堆转储功能 , 导出 hprof(Heap Profile)文件 。
- 配置 platform-tools 环境变量
- 使用命令将 Memory Profiler 中导出来的 hprof 文件转换为 MAT 可以解析的 hprof 文件 , 命令如下 platform-tools hprof-conv ../原始文件.hprof ../输出文件.hprof
- 打开 MAT
- File > open Heap dump , 选择我们转换后的文件
- 如果在 mac 上打不开 MAT , 可以参考Eclipse Memory Analyzer在Mac启动报错
- 如果在 mac 上配置 platform-tools 不成功的话 , 可以直接定位到 Android SDK 下的 platform-tools 目录 , 直接使用 hprof-conv 工具 , 命令如下 hprof-conv -z ../原始文件.hprof ../输出文件.hprof
我在项目中定义了一个静态的回调列表 sCallbacks , 并且把 MemoryLeakActivity 添加到了这个列表中 , 然后反复进出这个 Activity , 我们可以看到这个 Activity 的实例有 8 个 , 这就属于内存泄漏现象 , 下面我们来看下怎么找出这个内存泄漏 。
首先 , 按 8.3 小节的步骤打开我们的堆转储文件 , 打开后 , 我们可以看到 MAT 为我们分析的一个预览页 。
推荐阅读
- Java对象的内存分配过程是如何保证线程安全的?
- redis内存使用分析
- 中国茶路文化遗产保护与开发探索以湖南省为例
- 厉害了华为!先于美国禁令建立内存芯片库,存量能安然度过2020年
- 电商网站架构探索之SOA
- Redis内存又不够用了?教你几种集群方案轻松甩掉存储难题
- 谷歌|首发Android 13!谷歌Pixel 7 Pro渲染图曝光:后摄神似iPhone 14 Pro感叹号挖孔
- 群探索者的努力让茶馆成为传播茶文化的前沿阵地
- 手机内存不够?教你6招,立马多出几个G
- CPU,显卡,内存等硬件的频率是啥
