HPROF Viewer and Analyzer
HPROF 是J2SE a binary heap dump format originally supported by J2SE
- 为什么要查看Java Heap?
- 理解 HPROF 查看器的显示
- 获取Java Heap 的快照
- 查看保存的 HPROF 文件
- 在HPROF 查看器中深入 Heap Dump 数据
- 在 HPROF 分析其中分析 Heap Dump 数据
- 分类排序 Heap Dump 数据
- 显示Java 源代码
- 利用 HPROF 文件
1. 为什么要查看Java Heap?
HPROF 分析器有助于发现以下问题:
- GC Root 可以到达的已销毁的Activity
- 目标程序有重复的String 值
Dominator 位于树的顶端,如果你移除它,也会移除它的下属分支,所以这是释放内存的潜在方式
2. 理解 HPROF 查看器的显示
HPROF 查看器显示如下:
工具显示了如下信息:
列 | 描述 |
---|---|
Class Name | 对这块内存负责的Java类 |
Total Count | 实例总数(outstanding) |
Heap Count | 在选中堆中的实例个数 |
SizeOf | 实例的大小(当前的,如果是变量则为0) |
Shallow(浅) Size | 在这堆所有实例的总大小 |
Retained Size | 内存中该类所有实例占用的内存大小 |
Reference Tree | 指向所选实例的引用,以及指向引用的引用 |
Depth | 从任何的GCRoot跳到选定的实例的最短数目 |
Shallow Size | 这个实例的大小 |
Instance | 类的指定实例 |
Dominating(占用) Size | 这个实例占用(dominating)的内存大小 |
3. 获取Java Heap 的快照
4. 查看保存的 HPROF 文件
Heap 菜单选项:
- App Heap - 当前app使用的堆大小
- Image heap - 磁盘上的当前应用程序的内存映射拷贝
- Zygote heap - The common set of libraries and runtime classes and data that all apps are forked from. The zygote space is created during device startup and is never allocated into.
5. 在HPROF 查看器中深入 Heap Dump 数据
传统的工作模式:
- 在HPROF Viewer 中 选择一个类名
- 选中该类的一个实例
- 查看引用树
- 在一个条目上右键 Jump to source 或者 Go to instance
6. 在 HPROF 分析其中分析 Heap Dump 数据
你可以使用 HPROF Analyzer 来检测泄漏活动和查找重复字符串
在窗口右边
7. 分类排序 Heap Dump 数据
点击一列的头部
8. 显示Java 源代码
选中一个类或实例或者一个引用树上的条目后,右键, Jump to Source
9. 利用 HPROF 文件
可以导出为标准格式的HPROF文件