Mac Android 内存泄漏分析 实战演练
虚的概念就不讲了,自己去网上搜,一大堆。 这里来一次真刀真枪的实操实战演练。
简书上有一篇讲解 内存泄漏分析 的文章,总结的很到位,由浅入深,比较全面。建议结合起来阅读
内存泄露实例分析 -- Android内存优化第四弹
预备知识:
1、Mac版 MAT 官网下载地址: (也可以自行百度)
http://www.eclipse.org/downloads/download.php?file=/mat/1.7/rcp/MemoryAnalyzer-1.7.0.20170613-macosx.cocoa.x86_64.zip
2、 adb 重启命令
adb kill-server
adb start-server
开始正题:
1、运行 Android_SDK/tools/monitor, 界面如下。 如果启动报错,请关闭Android Studio、并保证手机正确连接电脑调试、adb正常运行.
当然 有些版本的 Android Studio 中也有快捷入口,自己去找
打开后 点击 红框中的按钮,稍等大约 十几秒到 几十秒时间 后,会生成后缀后 .hprof 文件,自己保存下来
2、转换格式,运行 sdk 目录 下的 Android_SDK/platform-tools/hprof-conv 可以执行文件,
输入命令:hprof-conv <空格> -z <空格> 你第1步得到的.hprof文件的路径 <空格> 格式转换后的文件名称
执行完成后,会在当前目录生成 bbbbbb 文件(名称可以自己修改),这个文件 就可以用 MAT 工具打开
3、下载MAC版本的 MAT 工具, 菜单->File->Open Heap Dump, 打开 bbbbb 文件
可选的文件格式 记得改为 All File, 所有文件都能选择
a、打开后,点击 第1个图标, 使用 histogram(翻译 柱状图) 格式打开, 方便查看 各个 类 的 实例分布情况
b、点击第2个位置输入框 ,可以按 类名 来查找 相应类的 实例分布。 这里可以看到 UserFavorFragment 类 有 3个实例, 共占用内存 672KB(不包含成员变量所引用的对象的内存),
4、分析
在第一行点 右键, 选择"Merge Shortest Paths to GC Roots"-> exclude weak/soft references , 可以查看 从 GCRoot 到这些 UserFavorFragment 实例的 最短路径, 并且 不考虑 软引用和弱引用, 因为这两种引用 不影响GC,不会发生 内存泄漏.
可以看到这3个实例 的 引用路径, 但只有 2条记录, 有2个实例是被 同一个类的不同实例引用
完全打开第2条记录,可以看到 到底 是经过 怎样的 依赖,导致 UserFavorFragment 不能被 GC回收, 找到不合理的引用,再从代码里查找 它是何时何处 被引用的 ,就能找到内存泄漏的 根本原因。 最后才是想办法 修改代码,解决内存漏泄.
注意:这篇 文章 ,我们是 已经明确知道 UserFavorFragment 发生了漏泄, 实际我们如何确定 到底哪一块位置 发生了泄漏,可以通过 缩小范围的 方式 来确实, 如:打开某个 Activity发现 内存瀑增,那尝试不加载 某一块业务逻辑,看看内存是否仍然暴增, 这样不断缩小范围 就能确定是哪一个 类 发生 泄漏.
Mac Android 内存泄漏分析 实战演练相关推荐
- Android内存泄漏分析
内存泄漏指的是程序中不再使用的对象对象由于某些原因无法被正常GC回收.对象没 有及时释放,就会占据宝贵的内存空间,因而导致后续分配内存的时候,内存空间不足出现OOM.如果无用对象占据的控件越大,那么可 ...
- android释放acitity内存,Android 内存泄漏分析与解决方法
在分析Android内存泄漏之前,先了解一下JAVA的一些知识 1. JAVA中的对象的创建 使用new指令生成对象时,堆内存将会为此开辟一份空间存放该对象 垃圾回收器回收非存活的对象,并释放对应的内 ...
- Android内存泄漏分析及调试
2019独角兽企业重金招聘Python工程师标准>>> Android内存泄漏分析及调试 分类: Android2013-10-25 11:31 5290人阅读 评论(5) 收藏 举 ...
- Android 内存泄漏分析指北
android 内存泄漏分析指北 简单来说内存泄漏就是当对象不再被应用程序使用,但是垃圾回收器却不能移除它们,因为它们正在被引用 java 垃圾回收介绍: Java 虚拟机运行所管理的内存包括以下几个 ...
- Android 内存泄漏分析与解决方法
Android 内存泄漏分析与解决方法 参考文章: (1)Android 内存泄漏分析与解决方法 (2)https://www.cnblogs.com/start1225/p/6903419.html ...
- android 内存泄漏分析工具,Android内存泄漏终极解决篇(上)
一.概述 在Android的开发中,经常听到"内存泄漏"这个词."内存泄漏"就是一个对象已经不需要再使用了,但是因为其它的对象持有该对象的引用,导致它的内存不能 ...
- Android 内存泄漏分析(完)
什么是内存泄漏: 内存泄漏是当程序不再使用到的内存时,释放内存失败而产生了无用的内存消耗.内存泄漏并不是指物理上的内存消失,这里的内存泄漏是值由程序分配的内存但是由于程序逻辑错误而导致程序失去了对该内 ...
- Android内存泄漏分析及检测工具LeakCanary简介,androidui库
Android内存优化是APP稳定运行的重要一环,开发过程中如果代码写的过于随意,很容易造成内存泄漏,多次累积之后,便会产生OOM,进而造成app崩溃.本文介绍了内存泄漏的相关知识和检测工具LeakC ...
- android定时器内存泄露,Android内存泄漏分析以及解决方案
本文是看了公众号的文章,非常感谢,链接如下 概念 1.什么是内存泄漏? 一句话总结的话,那就是生命周期长的对象持有短生命周期的对象的引用导致其无法被及时释放,就会造成内存泄漏.(内存泄漏最终会导致内存 ...
最新文章
- 德国颁发抄袭大奖,中国包揽前10名拿了大满贯!
- 选择不相交区间(贪心算法) By ACReaper
- 【开发者成长】阿里代码缺陷检测探索与实践
- 【agc004d】Teleporter
- 安卓 camera 调用流程_音视频开发之旅(四)Camera视频采集
- linux下的关机重启
- 02-微信小程序商城 顶部广告图片(微信小程序商城开发、小程序毕业设计、小程序源代码)(黄菊华-微信小程序开发教程)
- 卡巴斯基最新Key下载 生成卡巴斯基Key的工具下载 卡巴斯基Key下载
- Juphoon RTC年度成绩单,请查收!
- 可汗学院公开课:统计学
- java 扁平化_java 扁平化输出json所有节点key/value
- 限量50件,属于创作者的、用代码设计的T恤
- ubuntu 17.04安装为知笔记
- 【Unity】AvProVideo 实现当前视频播放完毕自动加载下一视频
- 特殊时期下捣鼓树莓派4
- SpringBoot报错Shutting down ExecutorService ‘applicationTaskExecutor‘解决方法
- 原生js实现购物车添加删除商品、计算价格功能
- oracle11g GI+RAC卸载
- 节点表征学习与节点预测和边预测
- 基于RFM模型对借贷App用户分层分析案例