adb shell回車
一、procrank
VSS >= RSS >= PSS >= USS
VSS - Virtual Set Size 虛擬耗用內存(包含共享庫占用的內存)是單個進程全部可訪問的地址空間
RSS - Resident Set Size 實際使用物理內存(包含共享庫占用的內存)是單個進程實際占用的內存大小,對於單個共享庫, 盡管無論多少個進程使用,實際該共享庫只會被裝入內存一次。
PSS - Proportional Set Size 實際使用的物理內存(比例分配共享庫占用的內存)
USS - Unique Set Size 進程獨自占用的物理內存(不包含共享庫占用的內存)USS 是一個非常非常有用的數字, 因為它揭示了運行一個特定進程的真實的內存增量大小。如果進程被終止, USS 就是實際被返還給系統的內存大小。
USS 是針對某個進程開始有可疑內存泄露的情況,進行檢測的最佳數字。懷疑某個程序有內存泄露可以查看這個值是否一直有增加
二、dumpsys meminfo(或者直接讀取“/proc/meminfo”文件來獲得內存信息--Linux系統)
1、cat /proc/meminfo
MemTotal: 所有可用RAM大小(即物理內存減去一些預留位和內核的二進制代碼大小)。
MemFree:被系統留着未使用的內存。
Buffers: 用來給文件做緩沖的大小。
Cached: 被高速緩沖存儲器(cache memory)用的內存的大小(等於 diskcache minus SwapCache ).
SwapCached:swap 緩存的大小,Android很少使用swap的,經常為0。被高速緩沖存儲器(cache memory)用來交換空間的大小,用來在需要的時候很快的被替換而不需要再次打開I/O端口。
Active: 在活躍使用中的緩沖或高速緩沖存儲器頁面文件的大小,除非非常必要,否則不會被移作他用。
Inactive: 在不經常使用中的緩沖或高速緩沖存儲器頁面文件的大小,可能被用於其他途徑。
SwapTotal: 交換空間的總大小。
SwapFree: 未被使用交換空間的大小。
2、dumpsys meminfo 進程pid或程序包名
查詢結果根據以下4類分類:
OOM(out of memory)即內存泄露。一個程序中,已經不需要使用某個對象,但是因為仍然有引用指向它垃圾回收器就無法回收它,當該對象占用的內存無法被回收時,就容易造成內存泄露。
Android的一個應用程序的內存泄露對別的應用程序影響不大,因為為了能夠使得Android應用程序安全且快速的運行,Android的每個應用程序都會使用一個專有的Dalvik虛擬機實例來運行,也就是說每個應用程序都是在屬於自己的進程中運行的。如果程序內存溢出,Android系統只會kill掉該進程,而不會影響其他進程的使用(如果是system_process等系統進程出問題的話,則會引起系統重啟)。