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文件所在的目录。
注8:hpInputFileDir为手机中我们生成的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中。
关于它们的更多内容请参考《getSubStr》,《genSerial》
关于更多的Android内存泄露利器请阅读《Android内存泄露利器(RSS内存统计篇)》,《Android内存泄露利器(内存统计篇)》,
《Android内存泄露利器(全自动篇)》
0 0
- Android内存泄露利器(hprof篇)
- Android内存泄露利器(hprof篇)
- Android内存泄露利器(hprof篇)
- Android内存泄露利器(全自动篇)
- Android内存泄露利器(全自动篇)
- Android内存泄露利器(全自动篇)
- Android内存泄露利器(RSS内存统计篇)
- Android内存泄露利器(内存统计篇)
- Android内存泄露利器(内存统计篇)
- Android内存泄露利器(内存统计篇)
- Android内存泄露利器(RSS内存统计篇)
- Android内存泄露利器(RSS内存统计篇)
- Android内存泄露利器(内存统计篇)
- Android内存泄露利器MLT(整合篇)
- Android 内存泄露分析--MAT分析hprof文件
- Android内存泄露检测利器---LeakCanary
- LeakCanary,Android内存泄露处理利器
- Android监控内存泄露利器-使用Leak Canary
- android开源项目地址大全
- CSDN第一天
- Android组件系列----ContentProvider内容提供者【5】
- C学习之接口和实现
- android 给图片加文字水印
- Android内存泄露利器(hprof篇)
- oracle 常用命令
- LeetCode——Swap Nodes in Pairs
- (IT/互联网行业)你给自己当前的职位拼几分?(评分标准,个人看法,勿喷~)
- 关于只读成员函数
- 程序员必须了解的正则表达式——常用正则表达式
- C语言实现泛型编程
- 自定义流读取内存中的SequenceFIle数据
- iOS中引用计数内存管理机制分析