生成hprof文件可以在DDMS选中进程点击窗口左上角的"dump hprof file"按钮来直接生成,也可以通过在程序加代码中来生成

代码2

void generateHprof()

{

String packageName=getApplicationInfo().packageName;

String hpFilePath="/data/data/"+packageName+"/input.hprof";

try {

//Debug.dumpHprofData("/sdcard/input.hprof");

Debug.dumpHprofData(hpFilePath);

catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

建议使用代码生成hprof,然后使用批处理hprof文件,然后用Memory Analyzer tool(MAT)进行对多个hprof文件比较分析。

MAT导入.hprof文件以后,MAT会自动解析并生成报告,点击Dominator Tree,并按Package分组,选择自己所定义的Package类,比较各个类在不同时期的Retained Heap,找出可疑类,然后选择该类,点右键,选中show retained Set 项,参看Retained Heap的详细信息,进一步找出嫌疑项。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

一、批处理配置文件

批处理配置文件config.bat如下:
rem the following var is for getProcessState.bat
set rawDatadir=rawData
set processName=android.process.acore;com.android.systemui
rem set processShortName=a;b;c
set processShortName=
set outRoot=out
set statFilePrefix=stat
rem the following var is for getHprof.bat
set tools=D:\android\tools
set hpInputFileDir=/sdcard
set hpInputFile=input.hprof
set hpRoot=hpTemp
注1:rawDatadir为“ps -x”提取出来的文件的目录
注2:processName需要统计RSS的进程的名字,可以同时统计多个,进程名之间用“;”进行分割。
注3:processShortName需要统计RSS的进程的名字的缩写形式,如果不坐设置或设置为空,这程序会根据processName自动生成。
注4:outRoot为对进程的RSS进行统计最后的生成文件的存放目录。
注5:statFilePrefix为对进程的RSS进行统计最后的生成文件的前缀。
注6:tools为hprof-conv.exe所在的目录。
注7:hpInputFileDir为手机中我们生成的hprof文件所在的目录。
注8:hpInputFile为手机中我们生成的hprof文件的名字。
二,需要使用的bat库
子目录lib用于存放bat库
需要的bat库:genSerial.bat,getSubStr.bat。
关于genSerial.bat请参看《genSerial
关于getSubStr.bat请参看《getSubStr
三,在代码中生成Hprof文件:
在android代码,可以使用如下代码把hprof文件生成到sd卡上。
Debug.dumpHprofData("/sdcard/input.hprof");
可以不用sd卡,而将hprof文件直接生成在手机上,但是只能在"/data/data/"+packageName的目录下。
实例1
    void generateHprof()
    {
String packageName=getApplicationInfo().packageName;
String hpFilePath="/data/data/"+packageName+"/input.hprof";
try {
//Debug.dumpHprofData("/sdcard/input.hprof");
Debug.dumpHprofData(hpFilePath);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
    }
 
四,在电脑上通过批处理取转换Hprof 文件
如果在程序中用Debug.dumpHprofData("/sdcard/input.hprof")的方式生成了hprof文件,
那么就可以执行文件getHprof .bat来取得Hprof并转化为MemoryAnalyzer的格式。
getHprof.bat文件如下:
@echo off
call config.bat
if exist %hpInputFile% (
del %hpInputFile% /q
)
adb pull %hpInputFileDir%/%hpInputFile% .
if not exist %hpInputFile% (
echo fail to pull %hpInputFile%
exit 1
)
if not exist %hpRoot% (
md %hpRoot%
)
Setlocal enabledelayedexpansion
set path=%path%;%cd%\lib
call genSerial
set serial=!genSerial~result!
set hpOutFile=%serial%.hprof
%tools%\hprof-conv.exe %hpInputFile% %hpRoot%\%hpOutFile%
echo success!
endlocal
注1:需要在代码中先生成hprof文件,而且config.bat中配置的路径要和在代码中先生成hprof文件的路径一致。
注2:如果需要连续多次以固定的时间提取hprof文件,请参照《Android内存泄露利器(全自动篇)
注意3:需要把bat库genSerial.bat,getSubStr.bat放在子目录lib中。

生成hprof文件,用MAT进行分析的更多相关文章

  1. Android内存管理(12)*「实例」用Monitor 生成.hprof文件 并分析内存泄漏

    参考 http://blog.csdn.net/xiaanming/article/details/42396507 基本步骤: 1,准备一个有内存泄漏的代码 2,如何发现内存泄漏 3,生成.hpro ...

  2. 使用dbghelp生成dump文件以及事后调试分析

    前言 在产品的实际应用环境中,如果我们的程序在客户那里出现了问题,例如程序异常了,而这个时候的现象又不能还原或者很难还原重现,那么只有使用dump文件来保存程序的当前运行信息,例如调用堆栈等,同时使用 ...

  3. mat工具MemoryAnalyzer进行分析java内存溢出hprof文件

    java服务端程序报错后会生成hprof文件,我们可以通过mat工具MemoryAnalyzer进行分析 下载地址: http://www.eclipse.org/mat/downloads.php ...

  4. Android Studio - HPROF文件查看和分析工具

    Android Studio 翻译的官方文章 原文链接 当你在Android Studio中使用Android Monitor里的Memory Monitor工具监视内存使用情况时,可以把Java堆快 ...

  5. Android 内存使用hprof文件打开方法

    http://blog.csdn.net/moruihong/article/details/7677128 与C++的内存不同,C++的内存泄露是由于分配了内存给某程序但是又没有回收造成的.Java ...

  6. 【原创】android内存管理-hprof文件

    转载请注明出处 http://www.cnblogs.com/weiwangnuanyang/p/5703702.html 如果只是想确定一下某一个场景是否有内存泄漏,AndroidStadio的控制 ...

  7. mat 使用 分析 oom 使用 Eclipse Memory Analyzer 进行堆转储文件分析

    概述 对于大型 JAVA 应用程序来说,再精细的测试也难以堵住所有的漏洞,即便我们在测试阶段进行了大量卓有成效的工作,很多问题还是会在生产环境下暴露出来,并且很难在测试环境中进行重现.JVM 能够记录 ...

  8. MAT工具分析Dump文件(大对象定位)

    前段时间线上服务经常发生卡顿,经过排查发现是大对象引起的Fullgc问题,特此记录排查逻辑. 目录 目的 一.获得服务进程 二.生成dump文件 三.下载mat工具 四.使用mat工具导入第二步生成的 ...

  9. 将Mat类型坐标数据生成pts文件

    前言 获取人脸特征点的坐标信息之后,想要将坐标信息shape保存为pts/asf/txt等文件格式,本文就对此进行实现. 实现过程 1.确定pts文件的书写格式: 以要生成的文件为例,书写格式如下: ...

随机推荐

  1. 字符串转Unicode码

    var str = '中'; var charCode = str.charCodeAt(0); console.log(charCode); // => 20013; str.charCode ...

  2. Laravel实践-自定义全局异常处理

    在做API时,需要对一些异常进行全局处理 百牛信息技术bainiu.ltd整理发布于博客园比如添加用户执行失败时,需要返回错误信息 // 添加用户 $result = User::add($user) ...

  3. Code-NFine:NFine介绍

    ylbtech-Code-NFine:NFine介绍 1. NFine平台介绍返回顶部 1. 使用时请务必保留来源,请勿用于违反我国法律的web平台.如诈骗等非法平台网站.版权最终解释权归<NF ...

  4. 让ie支持css3的一些htc文件

    1. Dean Edwards的IE7.js (以及 IE8.js, IE9.js)这个玩意估计是试图让IE支持CSS3属性的鼻祖,还算蛮强大,就是性能开销较大,要解析很多文件脚本,给DOM添加大量的 ...

  5. sharepoint服务器修改密码后出现HTTP Error 503

    HTTP Error 503   解决办法: 更改sharepoint 网站应用程序池标示后,更改标示重新输入管理员密码,问题解决!

  6. 字符指针unsigned char *ch_p

    指向类型为unsigned char的指针变量叫字符指针. 例如: unsigned char ch = 'a'; unsigned char *ch_p = &ch;那么指针变量ch_p就是 ...

  7. HDU 5878 I Count Two Three (预处理+二分查找)

    题意:给出一个整数nnn, 找出一个大于等于nnn的最小整数mmm, 使得mmm可以表示为2a3b5c7d2^a3^b5^c7^d2​a​​3​b​​5​c​​7​d​​. 析:预处理出所有形为2a3 ...

  8. C#中的Webservice实例代码(vs2013)

    2.1首先创建一个最基本的web service服务端,顾名思义就是提供服务,这儿实现一个简单的加法计算. 首先,vs2013--文件---新建项目---Asp.net 空Web 应用程序    (V ...

  9. hdoj1001【智障了。。。】

    我不得不写这样一发,来提醒自己,本来是想在xixi面前1minAC,然后: 我没有用long long. wa一发 他告诉我每个案例后都要再加一个空行,没看见PE一 #include<iostr ...

  10. hdoj1272 小希的迷宫

    并查集 = =.一开始判断连通,没有判断环,后来判断了环,没有判断连通... 还有就是一开始是0 0,也是Yes,有道理么?我不是很懂.. #include <iostream> #inc ...