AS3.0 Profiler 性能分析利器

今年早些時候as升級到了3.0版本,本身前兩天升級了,發現以前咱們熟悉的 Android Monitor 不在了,取而代之的是Android Profiler,就參照官方文檔過了一遍。android

1:Android Profiler的是使用流程:

1.點擊工具欄的圖標便可打開c++

在Android Profiler窗口的頂部,如圖所示,選擇設備
1
和你想要配置的app進程
2
當咱們鏈接一個設備後,打開Android Profiles運行咱們的應用程序時,它會默認選中咱們的程序, Android Profiler顯示如圖1(圖片來自官網),
圖1
若是咱們鏈接了多個設備能夠在按鈕
1
的位置選擇設備,經過按鈕
2
的位置選擇想要的app進程,工具最底部顯示了一個時間軸,其中包含了CPU、內存和網絡使用的實時圖。該窗口還包括時間軸縮放控制按鈕
3
,一個跳轉到實時更新的按鈕
4
,以及顯示活動狀態、用戶輸入事件和屏幕旋轉事件
5
的事件時間軸。

咱們想要查看對應工具詳細的分析工具,只要單擊性能數據相對應的圖便可。下看看對應工具詳細的使用。bash

2:內存工具

2.1內存工具簡述(Memory Profiler)

咱們打開Memory Profiler後界面以下圖(圖片來自官網) 網絡

memory
如圖所示,內存剖析器的默認視圖包括如下內容:

1
:強制執行垃圾收集事件的按鈕
2
:捕獲堆轉儲的按鈕
3
:一個記錄內存分配的按鈕,當鏈接到運行Android7.1或更低的設備時,該按鈕纔會出現
4
:放大/退出時間線按鈕
5
:能夠跳轉到實時內存數據的按鈕。
6
:事件時間軸,顯示活動狀態、用戶輸入事件和屏幕旋轉事件。
7
:內存使用時間線,包括如下內容: 一個堆疊圖,顯示每一個內存類別的內存大小,如左側的y軸和頂部的顏色鍵。 虛線表示已分配對象的數量,如右側的y軸所示。 每一個垃圾收集事件的圖標

2.2:內存計算指標

根據Android系統,你在內存分析器的頂部看到的數字(以下圖)基於你的應用所提交的全部私有內存頁面。此計數不包括與系統或其餘應用程序共享的頁。 app

內存類別以下:

  • Java:從Java或Kotlin代碼中分配的對象的內存
  • Native:從C或c++代碼中分配的對象的內存,即便你沒有在app中使用c++,你可能會看到一些本地內存,由於Android框架使用Native內存來處理各類任務,好比處理圖像資產和其餘圖形——即便你寫的代碼是Java或Kotlin
  • Graphics:用於圖形緩衝區隊列的內存用於顯示屏幕上的像素,包括GL表面、GL紋理等。(注意,這是與CPU共享的內存,而不是專用的GPU內存)
  • Stack:在你的應用程序中,Native和Java棧使用的內存。這一般與你的應用程序運行的線程數有關
  • Code:您的應用程序用於代碼和資源的內存,如dex字節碼,優化或編譯的dex代碼。因此庫和字體
  • Other:應用程序使用的內存,系統不肯定如何分類
  • Allocated:應用程序分配的Java/Kotlin對象的數量。這並不計算用C或c++分配的對象

注意:當前應用程序中,native內存統計值可能會偏大,由於分析工具的一部內存也被算進去了,多達10MB的內存被添加到~100k對象,在將來版本的工具中,這些數字將從您的數據中過濾出來。框架

2.3:查看內存分配狀況

單擊工具欄記錄內存分配在內存分析器 咱們想要查看某一時刻程序的內存分配狀況也很簡單,以下圖: 工具

內存分配
最後的界面以下圖
最後結果

2.4 捕獲heap dump

heap dump顯示在你捕獲heap dump時應用程序中的哪些對象正在使用內存,特別是在擴展的用戶會話以後,heap dump能夠經過顯示仍在內存中的對象來幫助識別內存泄漏。一旦捕獲heap dump,能夠查看如下內容:性能

  • 應用分配了哪些類型的對象,以及每一個對象的數量
  • 每一個對象使用多少內存。
  • 每一個對象的引用都被保存在你的代碼中。
  • 調用堆棧分配對象的位置,(當您在錄製分配時捕獲heap dump 時,調用堆棧當前僅在Android 7.1中使用堆轉儲時纔可用。

要捕獲heap dump,在Memory Profiler工具欄中單擊Dump Java heap按鈕便可 在轉儲堆時,Java內存量可能會暫時增長,由於堆轉儲發生在和你的應用程序相同的進程,並須要一些內存來收集數據,heap dump出如今內存時間線下方,顯示了堆中的全部類型,如圖下圖所示。 測試

heap dump
在圖中能夠看到Class Name列表,,在列表中能夠看到如下信息:

  • Alloc Count:堆中的分配數量。
  • Native Size:此對象類型使用的Native內存總量(以字節爲單位),此列僅適用於Android 7.0及更高版本。 你會在這裏看到一些在Java中分配的對象的內存,由於Android爲一些框架類(好比Bitmap)使用本地內存。
  • Shallow Size:此對象類型使用的Java內存總量(以字節爲單位)
  • Retained Size:因爲此類的全部實例而保留的內存總大小(以字節爲單位)在class 列表頂部,可使用左側的下拉列表在下列堆轉儲之間切換
  • Default heap:當系統沒有指定堆時。
  • App heap:你的應用程序分配內存的主要堆。
  • Image heap:系統引導映像,包含在引導期間預加載的類,這裏的分配保證不會移動或消失,
  • Zygote heap:Android系統中的應用程序進程分支的寫入時複製堆。

2.5 將 heap dump 保存爲 HPROF

若是你想保存 heap dump爲往後查看,導出heap dump到一個HPROF文件的話,如須要點擊 Export capture to file按鈕,以下圖 字體

若是你須要從Android HPROF文件格式轉換爲Java SE HPROF格式,可使用hprof-conv工具進行轉化,它的位置在 android_sdk/platform-tools/目錄下,運行hprof-conv命令

hprof-conv heap-original.hprof heap-converted.hprof
複製代碼

3:CPU分析工具(CPU Profiler)

當你打開CPU分析器,它會當即開始顯示應用程序的CPU使用率和線程的活動,以下圖:

cpu
CPU Profiler的默認視圖包含如下內容:

1
:Event timeline:顯示應用在他們的生命週期中不一樣狀態間轉換時的活動,並指示用戶與設備的交互,包括屏幕旋轉事件
2
:CPU timeline:顯示應用程序的實時CPU使用狀況(佔可用CPU總時間的百分比)以及應用程序正在使用的線程總數。時間表還顯示了其餘進程(如系統進程或其餘應用程序)的CPU使用狀況,所以您能夠將其與應用程序的使用狀況進行比較。能夠經過沿着時間軸的橫軸移動鼠標來檢查歷史CPU使用率數據。
3
:Thread activity timeline:列出屬於你的應用程序進程的每一個線程,並使用下面列出的顏色在時間線上指示其活動。記錄方法跟蹤以後,能夠今後時間線中選擇一個線程,以在跟蹤窗格中檢查其數據。
  • 綠色:線程處於活動狀態或準備好使用CPU。也就是說,它處於「運行」或「可運行」狀態。
  • 黃色:線程處於活動狀態,但它正在等待I / O操做(例如磁盤或網絡I / O),而後才能完成工做。
  • 灰色:線程正在休眠,不佔用任何CPU時間。當線程須要訪問尚不可用的資源時,有時會發生這種狀況。線程進入自願睡眠,或者內核使線程進入休眠狀態,直到須要的資源變爲可用。
4
:Recording configurations:容許您選擇如下選項之一來肯定探查器如何記錄方法跟蹤。
  • Sampled(採樣):一個默認配置,能夠在應用程序執行期間頻繁地捕獲應用程序的調用堆棧。分析器比較捕獲的數據集合以獲取關於應用代碼執行的時間和資源使用信息。基於抽樣的跟蹤的一個固有問題是,若是您的應用程序在捕獲調用堆棧以後輸入方法,並在下次捕獲以前退出該方法,則該方法調用不會被分析器記錄。若是您對如此短的生命週期跟蹤方法感興趣,則應使用檢測跟蹤。

  • Instrumented:默認配置,在運行時測試您的應用程序,以在每一個方法調用的開始和結束時記錄一個時間戳。收集時間戳並進行比較,以生成方法跟蹤數據,包括定時信息和CPU使用狀況。請注意,與每種方法相關的開銷都會影響運行時性能,並可能影響分析數據 - 對於生命週期相對較短的方法來講,這一點更爲明顯。此外,若是您的應用程序在很短的時間內執行大量方法,分析器可能會快速超出其文件大小限制,而且沒法記錄任何進一步的跟蹤數據。

  • Edit configurations:容許您更改上述採樣和檢測記錄配置的某些默認設置,並將其保存爲自定義配置。

5
:Record button:開始和中止錄製方法跟蹤按鈕

4:網絡分析工具(Network Profiler)

網絡分析工具比較簡單,界面以下圖:

網絡
窗口的頂部的
1
處,能夠看見wifi無線信號的強弱,在時間線上能夠在
2
處點擊和拖動一部分的時間線來檢測流量,而後在窗口
3
中會顯示所選時間段內收發的文件,包括文件名,大小,類型,狀態和花費時間,你能夠對窗口
3
的列表根據列來進行排序。還能夠查看所選時間段的詳細拆分,拆分的timeline能夠顯示文件是何時收發的,點擊窗口3的其中一個文件,能夠在窗口
4
中查看文件的詳細信息。經過切換窗口
4
上方標籤能夠查看response data(響應數據), header information, or the call stack(調用棧)。
相關文章
相關標籤/搜索