Android Studio - HPROF文件查看和分析工具
翻译的官方文章 原文链接
当你在Android Studio中使用Android Monitor里的Memory Monitor工具监视内存使用情况时,可以把Java堆快照转储到Android HPROF文件中(译者注:与标准的java hprof文件格式标准不一样)。HPROF查看工具会列出类、类的实例和实例的引用树,以此来帮助你跟踪内存的使用情况,找出内存泄漏的地方。HPROF最初是由J2SE支持的一种二进制堆转储格式。
(本文出处:http://www.jianshu.com/p/7d958959cf33)
为什么要查看Java堆
Java堆展示如下信息:
- 按类展示实例对象的内存使用情况;
- 每次垃圾回收事件的样本数据,不管是系统触发还是你手动触发的垃圾回收事件;
- 帮助分析哪些对象类型也许会导致内存泄漏。
但是,HPROF文件只是展示了某一时刻Java堆的使用情况,如果你需要了解某段时间内Java堆使用情况的, 你需要通过分析不同时间点生成的HPROF文件来找出其中的变化。HPROF分析工具可以自动分析出以下两种类型的问题:
- 所有已经被销毁,但是不能回收的Activity的实例;
- 重复定义的字符串。
理解HPROF文件查看工具的显示
HPROF文件查看工具界面如下:
这个工具显示了如下信息:
| 名称 | 描述 |
|---|---|
| Class name | 类名 |
| Total Count | 该类的实例总数 |
| Heap Count | 所选择的堆中该类的实例的数量 |
| Sizeof | 单个实例所占空间大小(如果每个实例所占空间大小不一样则显示0) |
| Shallow Size | 堆里所有实例大小总和(Heap Count * Sizeof) |
| Retained Size | 该类所有实例所支配的内存大小 |
| Instance | 具体的实例 |
| Reference Tree | 所选实例的引用,以及指向该引用的引用。 |
| Depth | GC根节点到所选实例的最短路径的深度 |
| Shallow Size | 所选实例的大小 |
| Dominating Size | 所选实例所支配的内存大小 |
如果你点击了Analyzer Tasks就会展示HPROF分析工具,界面如下图右边板块:
用HPROF分析工具,可以检测到泄漏的activities、分析出重复定义的字符串。
获取和显示Java堆的快照
要想查看Java堆的快照,必须要经过下面两步:
- 在内存监视工具里显示一个正在运行的程序
- 点击Java堆转储按钮
当转储成功是这个内存监视器显示的图标会改变。Android studio创建的HPROF文件名格式为package_yyyy.mm.dd_hh.mm.ss.hprof,使用包名和转储的时间来命名,例如com.android.calc_2015.11.17_14.58.48.hprof。
查看一个已经保存好的HPROF文件
堆转储后,Android studio会自动保存HPROF文件,以便你再次查看。用HPROF查看工具查看HPROF文件的步骤如下:
- 在主窗口中点击Captures按钮,或者选择 View > Tools Windows > Captures,打开Captures窗口;
- 打开堆快照文件夹;
- 双击你想要查看的HPROF文件,打开HPROF文件查看工具界面;
- 选择你想查看的堆
- App heap - 当前app使用的堆
- Image heap - 当前app在硬盘上的内存映射
- Zygote heap - zygote 复制时继承来的库、运行时类和常量的数据集。zygote空间设备启动时创建,从不分配这里的空间。
- 选择你想查看的视图选项:
- Class List View
- Package Tree View
HPROF文件查看工具中分析数据
以下步骤是典型工作流程:
- 在HPROF文件查看工具中选择一个类名;
- 选择该类的一个实例;
- 查看引用树;
- 当需要的时候可以右键引用树种的条目跳转到源码或者实例。
HPROF文件分析工具中分析数据
用HPROF分析工具可以检测到泄漏的activities、分析出重复定义的字串。使用HPROF文件分析工具标准步骤如下:
- 打开Captures窗口,双击你想要查看的HPROF文件,打开HPROF文件查看工具界面;
- 点击Android Studio主窗口右边栏上的Analyzer Tasks,默认HPROF文件分析工具会出现在HPROF文件查看工具的右边。
- Analyzer Tasks列表中选择你想分析的选项;
- 点击开始分析的按钮;
- 查看分析结果,点击结果中条目可在HPROF文件分析工具中查看详情。
数据排序
在HPROF文件查看工具中,点击表格的顶部,可以让表格中数据升序或者将序排列。
展示Java源码
在HPROF文件查看工具中展示的部分项可以直接跳转到源码,右键项目点击Jump to Source就可以在代码编辑器中打开源码。
HPROF文件相关操作
Android Studio中你可以重命名、定位或者删除HPROF文件,你也可以把他转成标准的HPROF文件格式来使用其他的分析工具分析。
重命名HPROF文件
在Android Studio中重命名的HPROF文件仍然会出现在Captures窗口中。
Captures窗口HPROF文件列表中选择你想操作的文件,右键点击Rename
定位HPROF文件
你可以快速找到Android Studio存放HPROF文件的位置。在Captures窗口HPROF文件列表中选择你想操作的文件,右键点击show in explorer,Android Studio会打开系统文件浏览器定位到文件存放的位置。
注意:Android Studio无法在Captures窗口显示那些被移动别的路径下去的HPROF文件,如果想显示请使用File > Open。同理,不要使用系统的文件浏览器来重命名HPROF文件。
删除HPROF文件
Captures窗口HPROF文件列表中选择你想操作的文件,右键点击Delete,Android Studio会从Captures窗口和硬盘上删除文件。
将堆转储文件转化成标准的HPROF文件
转化成标准的HPROF文件后可以使用Android Studio之外的分析工具来分析。在Captures窗口HPROF文件列表中选择你想操作的文件,右键点击 Export to standard .hprof
Android Studio - HPROF文件查看和分析工具的更多相关文章
- Android开发之深入理解Android Studio构建文件build.gradle配置
摘要: 每周一次,深入学习Android教程,TeachCourse今天带来的一篇关于Android Studio构建文件build.gradle的相关配置,重点学习几个方面的内容:1.applica ...
- Android NDK开发 Android Studio使用新的Gradle构建工具配置NDK环境(一)
本文主要讲述了如何如何在Android Studio使用新的Gradle构建工具配置NDK环境,现在把相关的步骤整理出来分享给Android程序员兄弟们,希望给他们在配置NDK环境时带来帮助. 从An ...
- 为什么 Android Studio 工程文件夹占用空间这么大?我们来给它减减肥
偶然中发现Android Studio的工程文件夹比ADT Bundle的大很多.用Android Studio新建一个空工程,工程文件夹大小为30M,运行一次后大小为40M.同样用ADT Bundl ...
- android studio样式文件汇总
android studio样式文件汇总:shape.Theme|styles .selector 1:shape shape用于设定形状,有6个子标签,各属性如下: res/drawable/sty ...
- 为什么 Android Studio 工程文件夹占用空间这么大?
为什么 Android Studio 工程文件夹占用空间这么大? 学习了: https://www.cnblogs.com/chengyujia/p/5791002.html
- Android Studio怎么文件添加到收藏和打开收藏夹
http://jingyan.baidu.com/article/1709ad809e608b4634c4f0b9.html 在使用Android studio编写的代码的过程中,有时会碰到有一些文件 ...
- Android Studio中获取查看签名SHA1证书指纹数据或MD5的方法
原来在Eclipse中获取SHA1或者MD5,在IDE界面上就可以查找到. 切换到Android Studio后,如何查看呢?找了半天没找到.那就老办法命令行. 第一步.打开Android Studi ...
- Android Studio 插件开发详解二:工具类
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/78112856 本文出自[赵彦军的博客] 在插件开发过程中,我们按照开发一个正式的项 ...
- android studio布局文件/XML怎么代码补全
android studio中的布局文件代码补全方式是打第一个字母就提示了,而java代码有时候要按快捷键. 布局文件的话呢,要写在标签开始处才提示,在标签闭合处有时候不提示,有时候在内容里也会有不提 ...
随机推荐
- 3D touch的 使用心得
一.设置图标touch 快捷进入 1.静态标签 静态标签是我们在项目的配置plist文件中配置的标签,在用户安装程序后就可以使用,并且排序会在动态标签的前面. 我们先来看静态标签的配置: 首先,在in ...
- C# Winform 界面中各控件随着窗口大小变化
在做一项工程中,由于不确定目标平台的分辨率,而正常使用要求铺满整个屏幕,所以界面中的各个控件必须能够适应窗口的变化. 首先想到的就是控件的百分比布局,但是再尝试写了几个控件的Location和Size ...
- svg学习(七)polygon
<polygon> 标签用来创建含有不少于三个边的图形. <?xml version="1.0" standalone="no"?> & ...
- 欧几里得算法:从证明等式gcd(m, n) = gcd(n, m mod n)对每一对正整数m, n都成立说开去
写诗或者写程序的时候,我们经常要跟欧几里得算法打交道.然而有没要考虑到为什么欧几里得算法是有效且高效的,一些偏激(好吧,请允许我用这个带有浓重个人情感色彩的词汇)的计算机科学家认为,除非程序的正确性在 ...
- UCOS 解读代码
1.OSInit()函数:建立两个任务,一个是空闲任务,在任何任务没有就绪时运行,一个是统计任务,计算cpu的利用率.初始化 UCOSII 的所有变量和数据结构,2.OSTaskCreate 该函数返 ...
- jsp请求乱码问题
首先尝试添加filter,以下是我的自定义filter,实现了Filter接口: package com.deplume.ssm.filter;import javax.servlet.*;impor ...
- HttpClient_002_中文乱码、HttpClient中文乱码透析、总结
中文乱码原理代码: String s = "中文"; byte[] bs2 = s.getBytes("utf-8");//将s拆成:utf-8个体,注:utf ...
- Coursera台大机器学习课程笔记3 – 机器学习的可能性
提纲: 机器学习为什么可能? 引入计算橙球概率问题 通过用Hoeffding's inequality解决上面的问题,并得出PAC的概念,证明采样数据学习到的h的错误率可以和全局一致是PAC的 将得到 ...
- IUS
后端提取的sdf中可能是有negative timing 在interconnect上的,可能的原因是crosstalk之类的问题导致. negative timing在FF,clock的delay超 ...
- 在linux中的info手册的用法
就是一些快捷键 空格键向下翻页,当处在当前节点的底部时,空格键跳转到下一个节点. <DEL> 或者 <BACKSPACE> 向上翻页,当处在当前节点的顶部的时候,这两个键可以跳 ...
