Android内存泄露利器(hprof篇)

来源:互联网 发布:带函数冒泡排序c语言 编辑:程序博客网 时间:2024/05/22 12:04
我们可以使用代码生成hprof,然后使用批处理hprof文件,然后用MAT进行对多个hprof文件比较分析。
一、批处理配置文件
批处理配置文件config.bat如下:
rem the following var is for getProcessState.bat
set rawDatadir=rawData
set processName=com.sec.android.app.dialertab;android.process.acore;com.sec.android.provider.logsprovider
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:\SDK\froyo\android-sdk-Dempsey-I997\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:outRoot为对进程的RSS进行统计最后的生成文件的前缀。
注6:tools为hprof-conv.exe所在的目录。
注7:hpInputFileDir为手机中我们生成的hprof文件所在的目录。
注8hpInputFileDir为手机中我们生成的hprof文件的名字。
二,需要使用的bat库
子目录lib用于存放bat库
需要的bat库:genSerial.batgetSubStr.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中。
关于它们的更多内容请参考《getSubStrgenSerial
关于更多的Android内存泄露利器请阅读《Android内存泄露利器(RSS内存统计篇)》,《Android内存泄露利器(内存统计篇)》,
Android内存泄露利器(全自动篇)
0 0
原创粉丝点击