Android記憶體泄露利器(hprof篇)

來源:互聯網
上載者:User
我們可以使用代碼產生hprof,然後使用批處理hprof檔案,然後用Memory Analyzer tool(MAT)進行對多個hprof檔案比較分析。

一、批處理設定檔

批處理設定檔config.bat如下:rem the following var is for getProcessState.bat

set rawDatadir=rawDataset processName=android.process.acore;com.android.systemuirem set processShortName=a;b;cset processShortName=set outRoot=outset statFilePrefix=statrem the following var is for getHprof.batset tools=D:\SDK\android-sdk4.0\toolsset hpInputFileDir=/sdcardset hpInputFile=input.hprofset 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: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 blocke.printStackTrace();}    } 四,在電腦上通過批處理取轉換Hprof 檔案如果在程式中用Debug.dumpHprofData("/sdcard/input.hprof")的方式產生了hprof檔案,那麼就可以執行檔案getHprof .bat來取得Hprof並轉化為MemoryAnalyzer的格式。getHprof.bat檔案如下:@echo offcall config.batif 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 enabledelayedexpansionset path=%path%;%cd%\libcall genSerialset 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記憶體泄露利器(全自動篇)》

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.