Android開發過程中記憶體泄露檢測,android泄露

來源:互聯網
上載者:User

Android開發過程中記憶體泄露檢測,android泄露

一、記憶體泄露

記憶體流失會因為減少可用記憶體的數量從而降低電腦的效能。最終,在最糟糕的情況下,過多的可用記憶體被分配掉導致全部或部分裝置停止正常工作,或者應用程式崩潰。

記憶體流失可能不嚴重,甚至能夠被常規的手段檢測出來。在現代作業系統中,一個應用程式使用的常規記憶體在程式終止時被釋放。這表示一個短暫啟動並執行應用程式中的記憶體流失不會導致嚴重後果。

在以下情況,記憶體流失導致較嚴重的後果:

1)程式運行後置之不理,並且隨著時間的流失消耗越來越多的記憶體(比如伺服器上的背景工作,尤其是嵌入式系統中的背景工作,這些任務可能被運行後很多年內都置之不理);
2)新的記憶體被頻繁地分配,比如當顯示電腦遊戲或動畫視頻畫面時;
3)程式能夠請求未被釋放的記憶體(比如共用記憶體),甚至是在程式終止的時候;
4)泄漏在作業系統內部發生;
5)泄漏在系統關鍵驅動中發生;
6)記憶體非常有限,比如在嵌入式系統或可攜式裝置中;
7)當運行於一個終止時記憶體並不自動釋放的作業系統(比如AmigaOS)之上,而且一旦丟失只能通過重啟來恢複。

二、記憶體流失偵查工具

當一個Java對象已經沒有其他對象引用它時,Java的記憶體回收行程會將其回收並釋放記憶體。

一個Java的Heap Dump檔案指的是在一個時間點上Java對象的記憶體鏡像匯出檔案。它包括了所有的對象、欄位、原始類型和對象引用。它可以指示當JVM產生OutOfMemory錯誤的情況下自動建立一個堆轉儲。

使用Eclipse MAT(Eclipse Memory Analyser),有助於圖形化基於Java堆轉儲的對象引用,並提供工具以發現潛在的記憶體泄露。為了能讓Java虛擬機器(JVM)在發生OutOfMemory錯誤時產生記憶體鏡像檔案,我們可以使用-XX:+HeapDumpOnOutOfMemoryError選項,21.1所示。

安裝Eclipse MAT的步驟如下:

1)啟動Eclipse,點擊Help -> Intall New Software…;
2)點擊輸入欄右側小箭頭,選擇”Juno”(不同版本要找到和自己版本名稱對應的選項);
3)等待列表更新完畢,找到並展開”General Purpose Tools”;
4)選中並下載其中的”Memory Analyser (Incubation)”和”Memory Analyser (Charts)”兩項。
5)之後根據提示進行安裝。

三、MAT使用樣本

1)建立工程

建立Android 工程 “com.devdiv.test.mat_test”。並且建立如下類,然後運行該工程。

package com.devdiv.test.mat_test; import java.util.ArrayList;import java.util.List; import android.app.Activity;import android.os.Bundle; public class MainActivity extends Activity {     List<String> list = new ArrayList<String>();//    private PersonInfo person = new PersonInfo();         @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);                 new Thread () {            @Override            public void run() {                   while (true){                        MainActivity.this.list.add("OutOfMemoryError soon");                }            }        }.start();    }   }

2)分析記憶體

要獲得.hprof記憶體鏡像檔案,你可以在進程運行過程中,切換到DDMS的透視圖頁面,選中您要查看記憶體鏡像的進程,點擊“Dump HPROF file”即可。



產生的hprof檔案會預設使用MAT開啟,選擇“Leak Suspects Report”後,點擊Finish按鈕。

圖16-2 用MAT開啟記憶體鏡像檔案

經過一段時間的初始化後,就能夠直觀地看到關於記憶體泄露的餅圖,如所示:

圖16-3 記憶體泄露餅圖

然後就可以查看相關的記憶體泄露,如所示:


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.