<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                > 參考文章:[Heap Viewer](https://developer.android.com/intl/zh-cn/tools/performance/heap-viewer/index.html)? > [Android 內存監測工具 DDMS –> Heap?](http://blog.csdn.net/feng88724/article/details/6460918) > [使用DDMS中的內存監測工具Heap來優化內存](http://www.cnblogs.com/tianzhijiexian/p/4267919.html) # Heap Viewer能做什么? * 實時查看App分配的內存大小和空閑內存大小 * 發現Memory Leaks # Heap Viewer使用條件 * 5.0以上的系統,包括5.0 * 開發者選項可用 # Heap Viewer啟動 可以直接在Android studio工具欄中直接點擊小機器人啟動:? ![](https://box.kancloud.cn/2015-12-31_56849d294e19b.jpg) 還可以在Android studio的菜單欄中Tools也可以:? ![](https://box.kancloud.cn/2015-12-31_56849d29677b1.jpg) 如果你不用Android studio,可以在SDK下的tools下的monitor程序打開:? ![](https://box.kancloud.cn/2015-12-31_56849d2995fa0.png) # Heap Viewer面板 ![](https://box.kancloud.cn/2015-12-31_56849d29c548d.jpg) 按上圖的標記順序按下,我們就能看到內存的具體數據,右邊面板中數值會在每次GC時發生改變,包括App自動觸發或者你來手動觸發。 ok,現在來解釋下面板中的名詞 ## 總覽 ![](https://box.kancloud.cn/2015-12-31_56849d2a0515f.jpg) | 列名 | 意義 | | --- | --- | | Heap Size | 堆棧分配給App的內存大小 | | Allocated | 已分配使用的內存大小 | | Free | 空閑的內存大小 | | %Used | Allocated/Heap Size,使用率 | | Objects | 對象數量 | ## 詳情 ![](https://box.kancloud.cn/2015-12-31_56849d2a1c51a.jpg) | 類型 | 意義 | | --- | --- | | free | 空閑的對象 | | data object | 數據對象,類類型對象,最主要的觀察對象 | | class object | 類類型的引用對象 | | 1-byte array(byte[],boolean[]) | 一個字節的數組對象 | | 2-byte array(short[],char[]) | 兩個字節的數組對象 | | 4-byte array(long[],double[]) | 4個字節的數組對象 | | non-Java object | 非Java對象 | **下面是每一個對象都有的列名含義:** | 列名 | 意義 | | --- | --- | | Count | 數量 | | Total Size | 總共占用的內存大小 | | Smallest | 將對象占用內存的大小從小往大排,排在第一個的對象占用內存大小 | | Largest | 將對象占用內存的大小從小往大排,排在最后一個的對象占用的內存大小 | | Median | 將對象占用內存的大小從小往大排,拍在中間的對象占用的內存大小 | | Average | 平均值 | 當我們點擊某一行時,可以看到如下的柱狀圖: ![](https://box.kancloud.cn/2015-12-31_56849d2a41dff.jpg) 橫坐標是對象的內存大小,這些值隨著不同對象是不同的,縱坐標是在某個內存大小上的對象的數量 # Heap Viewer的使用 我們說Heap Viewer適合發現內存泄漏的問題,那你知道何為內存泄漏么? ## 內存泄漏 英文名:Memory Leaks? 標準解釋:無用的單純,但是還是沒GC ROOT引用的內存? 通俗解釋:該死不死的內存 ## 檢測 那么如何檢測呢?Heap Viewer中的數值會自動在每次發生GC時會自動更新,那么我們是等著他自己GC么?小弟不才,剛開始我就是這么一直等啊等,由于GC的時機是系統把握的,所以很不好把握,既然我們是來看內存泄漏,那么我們在需要檢測內存泄漏的用例執行過后,手動GC下,然后觀察`data object`一欄的`total size`(也可以觀察Heap Size/Allocated內存的情況),看看內存是不是會回到一個穩定值,多次操作后,只要內存是穩定在某個值,那么說明沒有內存溢出的,如果發現內存在每次GC后,都在增長,不管是慢增長還是快速增長,都說明有內存泄漏的可能性。 ## 實例 先來看3個圖:? 1.剛打開首頁,手動GC一下:? ![](https://box.kancloud.cn/2015-12-31_56849d2a59014.jpg)? 2.首頁到詳情頁10遍,最后回到首頁,手動GC一下,直到數值不再變化:? ![](https://box.kancloud.cn/2015-12-31_56849d2a7735c.jpg)? 3.首頁到詳情頁10遍,最后回到首頁,手動GC一下:? ![](https://box.kancloud.cn/2015-12-31_56849d2a93a6a.jpg)? 從`data object`一欄看到該類型的數值會在不斷增長,可能發生了內存泄漏,而我們也可以從上面三個圖的標紅部分來看,Allocated分別增加了`2.418M`和`1.084M`,而且你繼續這么操作下去,內存依然是增長的趨勢 # 補充 Heap Viewer不光可以用來檢測是否有內存泄漏,對于內存抖動,我們也可以用該工具檢測,因為內存抖動的時候,會頻繁發生GC,這個時候我們只需要開啟Heap Viewer,觀察數據的變化,如果發生內存抖動,會觀察到數據在段時間內頻繁更新。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看