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

歡迎訪問 生活随笔!

生活随笔

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

Android

Android内存分析

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

最近簡單學些了android內存分析,下面為一些學習筆記和整理。

?

一、內存數據的獲取

1. 查看手機系統內存信息

adb pull /system/build.prop

打開build.prop可以查看堆分配的一些信息:

?

2. VSS RSS USS PSS獲取

首先理解一下它們的含義:

VSS – Virtual Set Size 虛擬耗用內存(包含共享庫占用的內存)

RSS – Resident Set Size 實際使用物理內存(包含共享庫占用的內存)

PSS – Proportional Set Size 實際使用的物理內存(比例分配共享庫占用的內存)

USS – Unique Set Size 進程獨自占用的物理內存(不包含共享庫占用的內存)

一般來說內存占用大小有如下規律:VSS >= RSS >= PSS >= USS

?

下面介紹各項的獲取方法:

1)VSS和RSS

adb shell top命令,獲取到的信息列分別為:

PID(進程ID) ?CPU%(CPU占用率) #THR(程序線程數) ? VSS ? ? RSS ? UID(用戶ID) ? ? ?Name(程序名)

?

2)PSS

adb shell dumpsys meminfo [package-name]

?

3)USS

USS的獲取必須要通過procrank。首先到網上下載libpagemap.so,?procmem,?procrank這幾個文件(下載地址在網上找了好久,先賣個關子~~),然后push到android手機中。有的root機自帶這幾個文件,不需要額外下載。

adb push procrank /system/xbin adb push procmem /system/xbin adb push libpagemap.so /system/lib

然后賦予賦權:

adb shell chmod 6755 /system/xbin/procrank adb shell chmod 6755 /system/xbin/procmem adb shell chmod 6755 /system/lib/libpagemap.so

后面就可以用adb shell procrank命令了,該命令可以查看PID VSS RSS PSS USS所有數據。

?

二、內存分析

內存分析的工具有android studio、 DDMS monitor。隨著android studio版本的演進,功能也集成得越來越多,建議大家使用最新的android studio。

?

1. 查看內存占用趨勢圖

可以看到內存隨著時間變化趨勢。

?

2. dump java heap

點擊dump java heap,即會自動打開一個hprof文件,即為當前的java heap分配snapshot,可以按size排序。展示方式有class list view 和 package tree view。選擇一個class,右側instance中會列出所有instance變量,選擇一個instance,下方reference tree即展現該instance的引用過程。右擊即可直接跳到源碼。

上圖中所有量的含義如下:

左側class panel中:

  • Total Count 內存中該類的對象個數;
  • Heap Count 堆內存中該類的對象個數;
  • Sizeof 物理大小;
  • Shallow size 該對象本身占有內存大小;
  • Retained Size 釋放該對象后,節省的內存大小;

右側instance panel中:

  • depth 深度;
  • Shallow Size 對象本身內存大小;
  • Dominating Size 管轄的內存大小;

?

3. 內存分配跟蹤 allocation tracking

第一次點擊allocation tacking,即start allocation tracking,在手機上操作之后,再點擊一次即stop allocation tracking,然后會自動打開一個內存跟蹤alloc文件。可以group by Method或者allocator,Size就是內存大小,Count就是分配了多少次內存,可以一步步迭代到最底部。同樣的右擊可以定位到源碼。

點擊group by allocator右邊的彩色圖標,可以查看統計信息。隨著鼠標的移動,右側的信息實時展示,并且可以點擊分析局部。

?

另外android monitor中同樣可以跟蹤內存分配情況,作用基本上和android studio中使用一致,但是展示方式不一樣。android studio -> tools -> android -> android device monitor,即可打開monitor。

選擇待測試手機和進程,點擊start?tracking,手機上執行操作,點擊get allocations. 同樣的可以看到內存分配大小、分配對象、以及具體的分配順序。

?

三、內存泄漏、內存溢出

另外,順便說一下內存泄漏和內存溢出。

內存溢出就是應用的內存超過閾值了,主要原因有:

  • 瞬間申請過大內存;
  • 應用代碼存在內存泄露,內存長時間積累無法釋放;
  • 應用的某些邏輯操作瘋狂的消耗掉大量內存;
  • 內存溢出的判斷直接看實時日志OutOfMemoryError,但是具體分析需要通過allocation tracking追蹤之前的內存分配情況。

    ?

    內存泄漏即當對象本該被回收的時候還被其他對象所持有引用,導致應用長時間運行之后,所占用的內存越來越大,app卡頓或者crash。

    內存泄漏的分析可以借助1)dump java heap + memory analysis tool (MAT) ;2)leakcanary;3)android studio最新版本也集成了內存泄漏檢測,可以嘗試一下。

    ?

    參考網址:

    http://blog.csdn.net/yanbober/article/details/48394201

    http://developer.android.com/intl/ko/tools/debugging/debugging-memory.html

    http://blog.csdn.net/itfootball


    原文地址: http://www.dzwanli.com.cn/?p=1464

    總結

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

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