亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Android > 正文

Android內存泄漏終極解決篇(上)

2020-04-11 11:00:41
字體:
來源:轉載
供稿:網友

一、概述
在Android的開發中,經常聽到“內存泄漏”這個詞。“內存泄漏”就是一個對象已經不需要再使用了,但是因為其它的對象持有該對象的引用,導致它的內存不能被回收?!皟却嫘孤钡穆e累,最終會導致OOM的發生,千里之堤,毀于蟻穴。所以在寫代碼的過程中,應該要注意規避會導致“內存泄漏”的代碼寫法,提高軟件的健壯性。
本文將從發現問題、解決問題、總結問題的三個角度出發,循序漸進,徹底解決“內存泄漏”的問題。

二、內存泄漏的檢查工具Heap

工欲善其事必先利其器,要檢測“內存泄漏”的發生,需要借助DDMS中的Heap工具及MAT工具,Heap工具用于大致分析是否存在“內存泄漏”,而MAT工具則用于分析“內存泄漏”發生在哪里。

Heap工具的使用介紹

這里寫圖片描述

具體操作

  • 1.在Devices設備列表中,找到你所在的設備,點擊你想要監控的進程。
  • 2.點擊“Update Heap”按鈕更新堆內存的情況。
  • 3.點擊“Heap”視圖,查看內存的情況。
  • 4.每次在Activity的退出和進入的時候點擊“Cause GC”,手動調用GC釋放應用的內存。
  • 5.觀察data oject那一行,每一次點擊“Casue GC”的時候,觀察Total Size的值,如果該值不斷增加,則說明該應用程序存在“內存泄漏”。

我們先模擬一下內存泄漏,然后通過Heap工具來判斷一下是否存在內存泄漏。
上一段存在內存泄漏的代碼:

public class LeakAty extends Activity { @Override protected void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  setContentView(R.layout.aty_leak);  testLeak(); } /**  * 測試內存泄漏的代碼  */ private void testLeak() {  new Thread(new Runnable() {   @Override   public void run() {    while (true) {     try {      Thread.sleep(1000);     } catch (InterruptedException e) {      e.printStackTrace();     }    }   }  }).start(); }

上述的代碼存在內存泄漏,new Runnable(){}是一個非靜態的匿名內部類,所以它會強引用創建它的外圍對象LeakAty,我們來測試一下內存泄漏的過程,開啟手機的方向旋轉功能,不斷地旋轉手機,讓LeakAty不斷地創建新的實例。理論上如果不存在上述泄漏的代碼,之前的Activity會在onDestory之后被回收內存。而一旦存在上述泄漏的代碼,新創建的Ruannale實例會一直處于運行狀態,它不會被回收,而它強引用的LeakAty當然也不會被回收,所以在屏幕不斷旋轉,之前創建的LeakAty就不會被釋放,會導致旋轉n次,內存中就存在n+1個的LeakAty實例。
Heap工具第一次按下Cause GC按鈕的截圖:

這里寫圖片描述 

上圖的data object的Total Size的大小為1.031M。經過多次的旋轉屏幕之后,我們再看一下截圖

這里寫圖片描述 

Total Size變成了2.059M,從1.031M到2.059M,每次調用GC的過程中data object的總大小沒有回落,所以可以證實上面的代碼確實是存在內存泄漏的問題,那么泄漏發生在哪里?答案可以通過MAT工具來分析得到。

三、內存泄漏的分析工具MAT

要通過MAT分析,需要提供一個.hprof文件。我們可以通過”Dump HPROF file”按鈕轉存當前的堆內存信息。我們將其保存為1.hprof。

這里寫圖片描述

導出的1.hprof的格式需要通過../sdk/tools/目錄下的hprof-conv.exe工具進行轉換才能被MAT成功導入,我們將其轉換成out1.hprof
這里寫圖片描述

將out1.hprof導入到MAT工具中,File->Open Heap Dump…

這里寫圖片描述

點擊左邊的標簽Overview,Actions->Histogram

這里寫圖片描述

在Histogram界面中,因為我們想要知道Activity是否泄漏了,所以輸入關鍵詞Activity,然后按下回車鍵。

這里寫圖片描述

之后便可以得到Activity的相關的搜索結果,下圖的搜索結果中Activity的實例有7個。點擊選中下圖標紅色框框的地方,右鍵->Merge Shortest Paths to GC Roots->exclude all phantom/weak/soft etc. references。排除虛引用、弱引用、軟引用的實例,剩下的都是強引用實例。

這里寫圖片描述

從過濾出來的強引用的列表中,我們可以看到這七個實例都是被Thread所引用了。所以證實上面的代碼確實存在內存泄漏。

這里寫圖片描述

四、本文總結

內存泄漏檢測可以使用Heap工具,內存分析可以使用MAT工具。本文的案例中提到了一種內存泄漏的情況,就是非靜態內部類的對象會強引用其外圍對象,一旦這個非靜態內部類的實例沒有釋放,它的外圍對象也不會釋放,所以就會造成內存泄漏。下篇將具體探討一下,在Android的開發過程中,哪些寫法容易造成內存泄漏,該如何解決?請閱讀Android內存泄漏終極解決篇(下)。

以上就是本文的全部內容,希望大家喜歡。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
一区二区三区动漫| 久久久精品国产一区二区| 欧美电影免费看| 最近2019中文字幕第三页视频| 91免费国产网站| 色偷偷av一区二区三区| 青草成人免费视频| 午夜免费久久久久| 亚洲肉体裸体xxxx137| 奇米影视亚洲狠狠色| 亚洲色图偷窥自拍| 国产精品视频免费在线| 日韩欧美在线视频免费观看| 最近2019中文字幕mv免费看| 久久91精品国产91久久久| 国产精品久久久久福利| 国产日韩一区在线| 亚洲精品乱码久久久久久按摩观| 久久久久久午夜| 日韩av123| 久久久这里只有精品视频| 高清在线视频日韩欧美| 亚洲精品99久久久久| 欧美日韩国产91| 国产精品最新在线观看| 亚洲精品国产suv| 色999日韩欧美国产| 国产精品免费久久久| 中文字幕亚洲字幕| 日韩动漫免费观看电视剧高清| 国产综合在线视频| 日韩欧美大尺度| 亚洲一级免费视频| 一区二区欧美久久| 久久久黄色av| 国产精品ⅴa在线观看h| 国产精品视频在线播放| 色综合影院在线| 欧美午夜精品久久久久久浪潮| 国产精品日韩欧美综合| 国产精品视频网| 精品美女久久久久久免费| 日韩欧美成人精品| 久久av资源网站| 日韩中文在线中文网在线观看| 亚洲女人天堂色在线7777| 国产精品久久99久久| 亚洲精品久久在线| 亚洲人成毛片在线播放| 色综合视频一区中文字幕| 久久99国产精品自在自在app| 欧洲日本亚洲国产区| 久久久久久久久久av| 国产精品 欧美在线| 国内精品久久久久久久| 亚洲精品乱码久久久久久按摩观| 亚洲成人av片在线观看| 日韩中文娱乐网| 日韩经典一区二区三区| 国产日韩欧美在线播放| 国产精品久久久久av| 2020久久国产精品| 国产精品伦子伦免费视频| 午夜免费在线观看精品视频| 欧美日韩亚洲一区二| 久久精品国产成人| 国产99久久精品一区二区| 日韩视频免费在线观看| 亚洲色图在线观看| 中文字幕日韩在线播放| 欧美亚洲视频一区二区| 精品视频—区二区三区免费| 国产福利视频一区二区| 国产精品国产三级国产专播精品人| 日韩av理论片| 亚洲天堂av电影| 亚洲第一色在线| 欧美一级电影免费在线观看| 97av在线视频免费播放| 97在线视频免费看| 日韩欧美国产一区二区| 免费不卡欧美自拍视频| 亚洲欧美三级伦理| 日韩成人中文电影| 欧美成人激情图片网| 成人观看高清在线观看免费| 欧美黑人性猛交| 国产精品一区二区久久久| 97超级碰碰碰| 欧美高清视频免费观看| 欧美大片免费观看在线观看网站推荐| 国产精品丝袜久久久久久高清| 久久色精品视频| 国产亚洲精品久久久久动| 日韩人体视频一二区| 日韩电影免费在线观看| 欧美又大粗又爽又黄大片视频| 福利微拍一区二区| 亚洲人成电影网| 色av中文字幕一区| 国产精品第一第二| 久青草国产97香蕉在线视频| 成人春色激情网| 国产丝袜一区二区| 日韩成人在线电影网| 亚洲网站视频福利| 久久久久久久影视| 国产99久久精品一区二区永久免费| 一本色道久久综合狠狠躁篇怎么玩| 夜夜嗨av一区二区三区免费区| 国产精品一区二区三| 久久久之久亚州精品露出| 97在线免费观看视频| 欧美亚洲一级片| 欧美日韩国产一中文字不卡| 中文字幕日韩综合av| 欧美黄色片在线观看| 久久6免费高清热精品| 久久久久久九九九| 欧美激情视频网| 亚洲国产91精品在线观看| 亚洲精品av在线| 亚洲日韩中文字幕在线播放| 欧美重口另类videos人妖| 高清欧美一区二区三区| 欧美多人爱爱视频网站| 成人久久一区二区三区| 丰满岳妇乱一区二区三区| 欧美乱大交做爰xxxⅹ性3| 日韩极品精品视频免费观看| 亚洲一级片在线看| 久久亚洲精品一区二区| 午夜精品久久久久久久久久久久久| 欧美美最猛性xxxxxx| 中文字幕亚洲综合| 亚洲色图激情小说| 欧美一级黄色网| 中文字幕日韩欧美精品在线观看| 一区二区三区美女xx视频| 国产91色在线|| 亚洲人成在线观看网站高清| 国产精品入口夜色视频大尺度| 国产一区红桃视频| 日韩电影中文字幕一区| 亚洲高清在线观看| 亚洲男人天堂视频| 国产精品日韩电影| 国产精品免费一区二区三区都可以| 69视频在线免费观看| 欧美大码xxxx| 激情久久av一区av二区av三区| www.欧美三级电影.com| 精品久久久久久中文字幕大豆网| 97精品国产97久久久久久| 亚洲的天堂在线中文字幕| 黄网站色欧美视频| 久久手机精品视频| 中文字幕日韩综合av| 97超碰国产精品女人人人爽| 日韩一区二区福利| 欧美老女人bb| 国产一区二区三区日韩欧美| 日韩电影中文字幕一区| 97精品一区二区视频在线观看|