精品丰满熟女一区二区三区_五月天亚洲欧美综合网_亚洲青青青在线观看_国产一区二区精选

  • <menu id="29e66"></menu>

    <bdo id="29e66"><mark id="29e66"><legend id="29e66"></legend></mark></bdo>

  • <pre id="29e66"><tt id="29e66"><rt id="29e66"></rt></tt></pre>

      <label id="29e66"></label><address id="29e66"><mark id="29e66"><strike id="29e66"></strike></mark></address>
      學(xué)習(xí)啦>學(xué)習(xí)電腦>電腦硬件知識(shí)>內(nèi)存知識(shí)>

      怎么用MAT分析Android程序內(nèi)存泄露

      時(shí)間: 鎮(zhèn)權(quán)965 分享

        Android應(yīng)用開發(fā)過程中,稍一不小心經(jīng)常會(huì)出現(xiàn)內(nèi)存泄露,如何用工具來檢測(cè)下我們的應(yīng)用是否存在內(nèi)存泄露呢?下面學(xué)習(xí)啦小編就給大家整理收集了用MAT分析Android程序的內(nèi)存泄露的方法,供你學(xué)習(xí)閱覽,希望能對(duì)你有幫助!

        用MAT分析Android程序的內(nèi)存泄露的方法

        在Eclipse中新建一個(gè)Android工程,名字叫做:memoryleak。功能很簡(jiǎn)單,只有一個(gè)MainActivity和一個(gè)ImageUtil。我們?cè)贛ainActivity中使用ImageUtil來加載圖片。注意我們的ImageUtil是單例類。在創(chuàng)建的時(shí)候需要傳入context。

        應(yīng)用起來以后,轉(zhuǎn)屏。轉(zhuǎn)屏以后,MainActivity會(huì)重建,導(dǎo)致ImageUtil重新加載圖片。很不幸的是,因?yàn)镮mageUtil并沒有重建,還持有之前的Context,也就是之前的那個(gè)MainActivity實(shí)例。多次轉(zhuǎn)屏以后,我們?cè)贓clipse的DDMS里面,導(dǎo)出內(nèi)存映像文件。導(dǎo)出的文件叫做:com.example.memoryleak.hprof。

        DDMS導(dǎo)出的內(nèi)存映像文件并不能被MAT直接使用。需要轉(zhuǎn)換一下。在命令行輸入:hprof-conv com.example.memoryleak.hprof memoryleak.hprof。

        用MAT打開memoryleak.hprof。

        點(diǎn)擊“Histogram”

        在Class Name后面的輸入框輸入應(yīng)用的名字:com.example.memoryleak。

        可以看到有4個(gè)MainActivity實(shí)例,如果沒有泄露的情況下只應(yīng)該有一個(gè)實(shí)例,說明存在內(nèi)存泄露。在MainActivity上點(diǎn)擊右鍵->"Merge Shortest Paths To GC Roots"->"exclude all phantom/weak/soft etc.refrences"。

        在打開的頁(yè)面中,點(diǎn)擊可以看到詳細(xì)的引用信息。

        上圖中可以看出來是ImageUtil引用了一個(gè)MainActivity的實(shí)例。這樣就找到了泄露的根源,就可以進(jìn)行處理了。怎么樣,是不是很簡(jiǎn)單

      2241135