Android Studio

翻译的官方文章 原文链接

当你在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文件查看工具界面如下:

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文件分析工具

用HPROF分析工具,可以检测到泄漏的activities、分析出重复定义的字符串。

获取和显示Java堆的快照

要想查看Java堆的快照,必须要经过下面两步:

  1. 在内存监视工具里显示一个正在运行的程序
  2. 点击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文件的步骤如下:

  1. 在主窗口中点击Captures按钮,或者选择 View > Tools Windows > Captures,打开Captures窗口;
  2. 打开堆快照文件夹;
  3. 双击你想要查看的HPROF文件,打开HPROF文件查看工具界面;
  4. 选择你想查看的堆
    • App heap - 当前app使用的堆
    • Image heap - 当前app在硬盘上的内存映射
    • Zygote heap - zygote 复制时继承来的库、运行时类和常量的数据集。zygote空间设备启动时创建,从不分配这里的空间。
  5. 选择你想查看的视图选项:
    • Class List View
    • Package Tree View

HPROF文件查看工具中分析数据

以下步骤是典型工作流程:

  1. 在HPROF文件查看工具中选择一个类名;
  2. 选择该类的一个实例;
  3. 查看引用树;
  4. 当需要的时候可以右键引用树种的条目跳转到源码或者实例。

HPROF文件分析工具中分析数据

用HPROF分析工具可以检测到泄漏的activities、分析出重复定义的字串。使用HPROF文件分析工具标准步骤如下:

  1. 打开Captures窗口,双击你想要查看的HPROF文件,打开HPROF文件查看工具界面;
  2. 点击Android Studio主窗口右边栏上的Analyzer Tasks,默认HPROF文件分析工具会出现在HPROF文件查看工具的右边。
  3. Analyzer Tasks列表中选择你想分析的选项;
  4. 点击开始分析的按钮;
  5. 查看分析结果,点击结果中条目可在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文件查看和分析工具的更多相关文章

  1. Android开发之深入理解Android Studio构建文件build.gradle配置

    摘要: 每周一次,深入学习Android教程,TeachCourse今天带来的一篇关于Android Studio构建文件build.gradle的相关配置,重点学习几个方面的内容:1.applica ...

  2. Android NDK开发 Android Studio使用新的Gradle构建工具配置NDK环境(一)

    本文主要讲述了如何如何在Android Studio使用新的Gradle构建工具配置NDK环境,现在把相关的步骤整理出来分享给Android程序员兄弟们,希望给他们在配置NDK环境时带来帮助. 从An ...

  3. 为什么 Android Studio 工程文件夹占用空间这么大?我们来给它减减肥

    偶然中发现Android Studio的工程文件夹比ADT Bundle的大很多.用Android Studio新建一个空工程,工程文件夹大小为30M,运行一次后大小为40M.同样用ADT Bundl ...

  4. android studio样式文件汇总

    android studio样式文件汇总:shape.Theme|styles .selector 1:shape shape用于设定形状,有6个子标签,各属性如下: res/drawable/sty ...

  5. 为什么 Android Studio 工程文件夹占用空间这么大?

    为什么 Android Studio 工程文件夹占用空间这么大? 学习了: https://www.cnblogs.com/chengyujia/p/5791002.html

  6. Android Studio怎么文件添加到收藏和打开收藏夹

    http://jingyan.baidu.com/article/1709ad809e608b4634c4f0b9.html 在使用Android studio编写的代码的过程中,有时会碰到有一些文件 ...

  7. Android Studio中获取查看签名SHA1证书指纹数据或MD5的方法

    原来在Eclipse中获取SHA1或者MD5,在IDE界面上就可以查找到. 切换到Android Studio后,如何查看呢?找了半天没找到.那就老办法命令行. 第一步.打开Android Studi ...

  8. Android Studio 插件开发详解二:工具类

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/78112856 本文出自[赵彦军的博客] 在插件开发过程中,我们按照开发一个正式的项 ...

  9. android studio布局文件/XML怎么代码补全

    android studio中的布局文件代码补全方式是打第一个字母就提示了,而java代码有时候要按快捷键. 布局文件的话呢,要写在标签开始处才提示,在标签闭合处有时候不提示,有时候在内容里也会有不提 ...

随机推荐

  1. EntityFramework SQLiteCodeFirst 自动创建数据库 关闭级联删除

    外键的级联删除: 如A表中有主键idA, B表中设置外键(ForeignKey)为A表中的主键idA, 当A表中的记录被删除时, B表中所有引用此条记录的记录(即所有外键为idA的记录)将自动被删除 ...

  2. Ubuntu 安装java环境搭建

    1.下载JDK 8从http://www.oracle.com/technetwork/java/javasebusiness/downloads/选择下载JDK的最新版本 JDK 8. 2.解压文件 ...

  3. An AVPlayerItem cannot be associated with more than one instance of AVPlayer错误

    An AVPlayerItem cannot be associated with more than one instance of AVPlayer An AVPlayerItem cannot ...

  4. Linux用户配置sudo权限

    Linux用户配置sudo权限 创建sudo权限用户 #useradd supope #passwd supope #visudo #supope         ALL=(ALL)       AL ...

  5. 制作U盘启动盘及安装操作系统的方法

    U盘启动盘制作方法: 1.从网上下载最新的老毛桃U盘启动制作工具主程序并安装 2.插入U盘(制作启动盘前先保存好你的资料到其它地方,以防丢失不可找回) 3.插入正确的U盘后程序会自动检测到U盘,启动模 ...

  6. lodash的源码(1)

    数组篇 1.compact,就是将数组中的false值去掉 function compact(array) { var index = -1, length = array ? array.lengt ...

  7. mysql中OPTIMIZE TABLE的作用

    在使用mysql的时候有时候,可能会发现尽管一张表删除了许多数据,但是这张表表的数据文件和索引文件却奇怪的没有变小.这是因为mysql在删除数据(特别是有Text和BLOB)的时候,会留下许多的数据空 ...

  8. PL/SQL 存储函数和过程

    --存储过程 .不带参: create or replace procedure 存储过程名 as|is --说明部分 begin --执行的语句: end: 调用存储过程 execute 存储过程名 ...

  9. lua OOP实现对象的链式调用

    数学中的链式法则 http://sx.zxxk.com/ArticleInfo.aspx?InfoID=164649 链式微分法则:实数运算的链式法则:对数运算的链式法则:平行公理的链式法则:向量运算 ...

  10. RabbitMq 应用

    RabbitMQ是一个在AMQP基础上完整的,可复用的企业消息系统.它可以用于大型软件系统各个模块之间的高效通信,支持高并发,支持可扩展. 前提是你的RabbitMq服务已搭建好,制作一个winfor ...