android内存分析:heap Snapshot的使用
网上有很多讲解关于android studio中memory工具的使用,接下来我来说一段在项目中发生的实例;大家可以根据我的这个方法来分析自己项目中的问题
首先我们要通过手动先触发GC操作,点击memory面板中的“小黄车”,内存稳定后点击dump java heap 按钮;过一会android studio会自动生成,堆内存中对象的列表文件扩展名为.hprof文件!如下图:
在这张图片中我们需要重点观察.hprof的左半区,显示的方式为app heap,就是应用中堆对象列表,紧当前状态下的列表。这个列表中可能包含你想要的对象或者是你不想要的对象,当然我们看这个列表的初衷是列表中都是我们希望存在的对象;所以我们这个时候就要分析应该被GC掉的对象为什么还会存在这里!如果存在了,吼吼那就是已经发生内存泄漏了。
这张图片是在我真实的产品中所截图,但是高亮显示中的BrowEntity确实是应该释放的对象,相信大伙已经猜到了这个对象指的就是一个表情实体,那么选中这个表情实体之后右侧就会出现这个表情实体对象所有的实例。点击某一个实例的时候会看到右侧面板出现的实例属性等。而下面的ReferenceTree正是其中一个BrowEntity实例的引用所在,是一个ArrayList中!所以这个对象引用未释放的原因就找到了,解决方法可以是在Fragment的onDestroy中将ArrayList=null;执行;当然这里还有个问题就是再次初始化的时候仍然需要借用ArrayList,当然这不是我要谈论问题的重点,这里可以自己权衡。所以我们可以利用这种方式排查占用内存较大的对象如果不需要驻在内存当中就可以选择适当方式进行引用清理,从而达到节省内存的目标!
当然在分析这个列表哪些对象占用空间比较大时我们可以根据表头含义对其排序;表头列含义如下:
名称 | 意义 |
---|---|
Total Count | 内存中该类的对象个数 |
Heap Count | 堆内存中该类的对象个数 |
Sizeof | 物理大小 |
Shallow size | 该对象本身占有内存大小 |
Retained Size | 释放该对象后,节省的内存大小 |
android内存分析:heap Snapshot的使用的更多相关文章
- Android内存分析工具
在Android系统开发过程中,经常会要去分析进程的内存的使用情况,简单介绍下Android内存分析的相关工具. 文章参考: 1.dumpsys 2.memory-analysis-command 1 ...
- Android内存分析工具DDMS heap + MAT 安装和使用
一 Java内存分析工具扫盲 如果像我一样一点都不了解,可以先进行内存分析工具扫盲 MAT介绍: Eclipse Memory Analyzer(MAT)一个功能丰富的 JAVA 堆转储 ...
- Android 内存分析工具 MAT(Memory Analyzer Tool)
如果使用DDMS确实发现了我们的程序中存在内存泄漏,那又如何定位到具体出现问题的代码片段,最终找到问题所在呢?如果从头到尾的分析代码逻辑,那肯定 会把人逼疯,特别是在维护别人写的代码的时候.这里介绍一 ...
- 记一次Android内存分析过程
前言 上周五的时候,祝峰找到我,反映了Android收银台买单结果页内存飙升的问题.我在自己的机器上也试着重现了一下,发现从支付台-微信支付成功并返回后,进入买单结果页的内存会突然增大,导致GC,如图 ...
- Android内存分析命令(转)
一.概述 1.1 内存指标概念 Item 全称 含义 等价 USS Unique Set Size 物理内存 进程独占的内存 PSS Proportional Set Size 物理内存 PSS= U ...
- Android 内存分析工具 - LogCat GC
一.GC_Reason 触发垃圾回收的回收的集中原因: 类型 描述 GC_CONCURRENT 内存使用将满时,并发的进行垃圾回收. GC_FOR_MALLOC 当内存已满应用尝试分配内存时会出触发垃 ...
- Android 内存分析
1.使用adb命令查看app内存使用情况 adb shell dumpsys meminfo <package_name> adb shell top | grep <package ...
- Android内存泄漏检测利器:LeakCanary
Android内存泄漏检测利器:LeakCanary MAR 28TH, 2016 是什么? 一言以蔽之:LeakCanary是一个傻瓜化并且可视化的内存泄露分析工具 为什么需要LeakCanary? ...
- android--------Android内存分析工具的使用
内存分析(in-memory analytics)是我们编写速度快.效率高的代码必不可少的知识.如果自己编写的代码在内存的分配一无所知,我想这样的程序让你去优化,应该是无从下手的.那么内存分析是什么? ...
随机推荐
- windwos server 路由备份和恢复 路由表备份和恢复
netsh dump>:c\name.dmp netsh exec >:c\name.dmp
- ios推送-B/S架构-socket
B/S架构项目,某一用户登录后执行了某些动作需要向在手机登录的对应的用户推送消息 通过socket实现 1.socket服务器:使用C#的window服务(该服务监听两个端口:比如平台8889,手机8 ...
- IP地址,子网掩码,默认网关,DNS服务器详解
为了更深入的学习TCP/IP协议,最近看了不少有关资料,收集整理记录如下,以备后面的使用和方便各位学习: IP地址,子网掩码,默认网关,DNS服务器是什么意思? (一) 问题解析 001. 问: ...
- 使用Lua脚本语言开发出高扩展性的系统,AgileEAS.NET SOA中间件Lua脚本引擎介绍
一.前言 AgileEAS.NET SOA 中间件平台是一款基于基于敏捷并行开发思想和Microsoft .Net构件(组件)开发技术而构建的一个快速开发应用平台.用于帮助中小型软件企业建立一条适合市 ...
- 第六届福建省大学生程序设计竞赛(FZU2213—FZU2221)
from:piaocoder Common Tangents(两圆之间的公公切线) 题目链接: http://acm.fzu.edu.cn/problem.php?pid=2213 解题思路: 告诉你 ...
- Swift中的一些关键字
以下关键字关于引用传参.属性.修改成员变量.静态变量.索引和构造函数重载 读过The Swift Programming Language的人都能看得出,我上面的这几个说法全不是apple的习惯用语. ...
- Linux第02天
Linux 第02天 1.Linux磁盘和文件系统 VFS————虚拟文件系统 df命令————查看已挂载的分区 df 分区名 du命令————查看文件夹大小 du 文件夹名 ln命令————符号链接 ...
- Struts2文件上传与下载
一,页面 index.html 在页面中最重要的就是这个文件上传用的 form 表单,注意这里一定要把 form 的encyType属性明确标定为“multipart/form-data”,只有这样. ...
- 在Oracle SQLplus下建用户 建表
在建表之前最好新建一个用户,因为在sys用户下的表格不允许删除列, 所以最好不要在sys用户下建表. 一.在Oracle SQLplus下建用户: 1.以dba身份登陆SQLplus: [oracle ...
- UVA567
var i,n,j,k,t:longint;a:array[1..20,1..20]of longint; function min(a,b:longint):longint;begin if a&l ...