网上有很多讲解关于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的使用的更多相关文章

  1. Android内存分析工具

    在Android系统开发过程中,经常会要去分析进程的内存的使用情况,简单介绍下Android内存分析的相关工具. 文章参考: 1.dumpsys 2.memory-analysis-command 1 ...

  2. Android内存分析工具DDMS heap + MAT 安装和使用

    一  Java内存分析工具扫盲 如果像我一样一点都不了解,可以先进行内存分析工具扫盲   MAT介绍:     Eclipse Memory Analyzer(MAT)一个功能丰富的 JAVA 堆转储 ...

  3. Android 内存分析工具 MAT(Memory Analyzer Tool)

    如果使用DDMS确实发现了我们的程序中存在内存泄漏,那又如何定位到具体出现问题的代码片段,最终找到问题所在呢?如果从头到尾的分析代码逻辑,那肯定 会把人逼疯,特别是在维护别人写的代码的时候.这里介绍一 ...

  4. 记一次Android内存分析过程

    前言 上周五的时候,祝峰找到我,反映了Android收银台买单结果页内存飙升的问题.我在自己的机器上也试着重现了一下,发现从支付台-微信支付成功并返回后,进入买单结果页的内存会突然增大,导致GC,如图 ...

  5. Android内存分析命令(转)

    一.概述 1.1 内存指标概念 Item 全称 含义 等价 USS Unique Set Size 物理内存 进程独占的内存 PSS Proportional Set Size 物理内存 PSS= U ...

  6. Android 内存分析工具 - LogCat GC

    一.GC_Reason 触发垃圾回收的回收的集中原因: 类型 描述 GC_CONCURRENT 内存使用将满时,并发的进行垃圾回收. GC_FOR_MALLOC 当内存已满应用尝试分配内存时会出触发垃 ...

  7. Android 内存分析

    1.使用adb命令查看app内存使用情况 adb shell dumpsys meminfo <package_name> adb shell top | grep <package ...

  8. Android内存泄漏检测利器:LeakCanary

    Android内存泄漏检测利器:LeakCanary MAR 28TH, 2016 是什么? 一言以蔽之:LeakCanary是一个傻瓜化并且可视化的内存泄露分析工具 为什么需要LeakCanary? ...

  9. android--------Android内存分析工具的使用

    内存分析(in-memory analytics)是我们编写速度快.效率高的代码必不可少的知识.如果自己编写的代码在内存的分配一无所知,我想这样的程序让你去优化,应该是无从下手的.那么内存分析是什么? ...

随机推荐

  1. 【sublime xftp插件】 Host key verification failed ,错误处理

    错误背景: 1.CentOS7上面作为运行环境,Coding在本机的windows环境 2.在windows上安装sublime 3,然后保存代码通过xftp保存到centos7虚机上面. 3.Cen ...

  2. iOS 判断纯汉字,还是是否含有汉字

    参考:http://www.jianshu.com/p/18cc511b5828 在一些特定的情况下,我们需要判断字符串是否为纯汉字,还是只是含有汉字的情况.我把它写成了一个分类,方便大家使用 NSS ...

  3. c语言for循环

    #include<stdio.h>#include<windows.h>#include <limits.h>#include <math.h>void ...

  4. SQL查询语句行转列横向显示

    http://blog.163.com/dreamman_yx/blog/static/26526894201121595846270/

  5. sqlserver 中row_number,rank,dense_rank,ntile排名函数的用法

    1.row_number() 就是行号 2.rank:类似于row_number,不同之处在于,它会对order by 的字段进行处理,如果这个字段值相同,那么,行号保持不变 3.dense_rank ...

  6. VMware下虚拟机的转移

    将虚拟机文件夹整个拷贝到另一台电脑上: 打开.vmx文件 打开即可: 注意:Mac系统的虚拟机要先用unlocker206破解,才能运行OS系统.

  7. Java 实现文件上传、下载、打包、文件copy、文件夹copy。

    文件and文件夹copy package org.test; import java.io.*; public class FileCopy { /** * 复制单个文件 * * @param old ...

  8. java基础-泛型2

    浏览以下内容前,请点击并阅读 声明 6 类型推测 java编译器能够检查所有的方法调用和对应的声明来决定类型的实参,即类型推测,类型的推测算法推测满足所有参数的最具体类型,如下例所示: //泛型方法的 ...

  9. CSS生僻问题一网打尽

    CSS生僻问题一网打尽 伪类和伪元素 伪类 何为伪类? 像类不是类,不是自己声明的类(不写样式也存在). 对伪元素的认识在早期网页上的超链接.链接(锚啊)用下划线标出来,点击后链接变紫色,鼠标悬上去变 ...

  10. tornado 学习笔记7 RequestHandler功能分析

           在第5部分讲到,构建一个tornado网站,必须包含一个或者多个handler,这些handler是RequestHandler的子类.每个请求都会被映射到handler中进行处理,处理 ...