日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android内存检测工具

發布時間:2023/12/3 Android 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android内存检测工具 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

什么是內存泄漏?

在運行的程序中,如果一個無法訪問的對象仍然占用著內存空間,即為此對象造成了內存泄漏

垃圾回收(GC)機制:

當垃圾回收運行時,虛擬機首先會識別GC Root。GC Root 是一個可以從堆外部訪問的對象,它可以是本地變量或運行中的線程等。虛擬機會識別所有可以從GC Root訪問的對象,它們將會被保留,而其他無法從GC Root訪問的對象,則會被認為垃圾并回收掉。

一、通過Memory Profiler檢測內存泄漏

打開 Memory Profiler,選中MEMORY ,進入MEMORY視圖,
點擊下圖所示按鈕,保存Heap Dump:

1.1、Activity 和 Fragment 內存泄漏檢測

Heap Dump 加載完成后,勾選 “Activity/Fragment Leaks” 選框:
此時如果有檢查到 Activity 或 Fragment 的泄漏,就會在界面中顯示出來:

需要注意的是:
針對 Fragment 有個特別的情況: 如果您載入的 Heap Dump 的時機,剛好介于 Fragment 被創建和被使用的時間之間,就會造成 Memory Profiler 誤報;相同情況也會發生在 Fragment 被緩存但是沒有被復用的時候

1.2、通過包名篩選來查看APP內其他內存泄漏的地方


選擇Arrange by package :選擇對應包名,查看可能存在內存泄漏的地方
① :選擇包名篩選
② :點擊LeakTestActivity$1 查看LeakedActivity內存泄漏的地方
③ :右鍵,跳轉到發生內存泄漏源碼的地方

1.3、通過觀察 MEMORY 內存圖標趨勢判斷是否發生內存泄漏

可以通過橫豎屏切換,或者多執行幾次可能發生內存泄漏的代碼,通過觀察MEMORY 軌跡趨勢,如果內存走向是增加的,則肯定發生了內存泄漏,如下圖:

查看堆和內存分配:
https://developer.android.com/studio/profile/memory-profiler?utm_source=android-studio#capture-heap-dump

二、HeapView 使用

啟動:Sdk/tools/monitor 啟動Monitor。端口沖突的話可以先關閉AS

A:打開DDMS視圖,
B:選擇Heap窗口
C:選擇對應包名,點擊Heap 按鈕
D:點擊Heap按鈕
E:Cause GC 更新數據

列名意義
Heap Size堆棧分配給App的內存大小
Allocated已分配使用的內存大小
Free空閑的內存大小
%UsedAllocated/Heap Size,使用率
Objects對象數量

內存詳情

類型意義
free空閑的對象
data object數據對象,類類型對象,最主要的觀察對象
class object類類型的引用對象
1-byte array(byte[],boolean[])一個字節的數組對象
non-Java object非Java對象

每一列含義:

列名意義
Count數量
Total Size總共占用的內存大小
Smallest將對象占用內存的大小從小往大排,排在第一個的對象占用內存大小
Largest將對象占用內存的大小從小往大排,排在最后一個的對象占用的內存大小
Median將對象占用內存的大小從小往大排,拍在中間的對象占用的內存大小
Average平均值

點擊data object行時,可以看到如下的柱狀圖

橫坐標是對象的內存大小,這些值隨著不同對象是不同的,縱坐標是在某個內存大小上的對象的數量

2.1 HeapView使用場景:

Heap Viewer中的數值會自動在每次發生GC時會自動更新。

2.2 內存泄漏檢查

在需要檢測的用例執行后,手動點擊 按鈕,觸發GC,然后觀察 data object 一欄的 Total Size (也可以觀察Heap Size/Allocated內存的情況) ,看看內存會不會恢復到一個穩定的值,多次操作后,只要這個值穩定,說明沒有內存泄漏。

如果每次GC后值都在增長,則說明有內存泄漏的可能性

2.3 內存抖動檢查

內存抖動會伴隨著頻繁的GC。只需要開啟Heap View,觀察數據就行了。
如果發生內存抖動,會發現數據在短時間內頻繁更新

此部分參考:https://blog.csdn.net/zhangfei2018/article/details/49154479

三、LeakCanary檢查內存泄漏

添加依賴:

debugImplementation 'com.squareup.leakcanary:leakcanary-android:1.5.4' releaseImplementation'com.squareup.leakcanary:leakcanary-android-no-op:1.5.4'

Application中初始化:

這樣就能檢測Activity的內存泄漏了,當然Fragment或者其他的內存泄漏是檢測不到的。

如果需要檢查Fragment內存泄漏,需要使用RefWatcher來監控,修改如下:

在Application中提供一個全局的RefWatcher 對象,然后在Fragment調用如下:

更多內存分析方式:

dump文件分析、MAT分析

崩潰檢測

Monkey 檢測ANR和Crash

總結

以上是生活随笔為你收集整理的Android内存检测工具的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。