Android開發中記憶體 VSS、RSS、PSS、USS 的區別
# procrank PID Vss Rss Pss Uss Swap PSwap USwap ZSwap cmdline 1546 23119064K 434772K 246374K 221424K 26896K 25795K 25776K 8547K system_server 2195 18248184K 348776K 180992K 166788K 27548K 26431K 26412K 8758K com.android.systemui ...1108 10797196K 3268K 65K 44K 648K 648K 648K 214K /system/bin/thermald ------ ------ ------ ------ ------ ------ ------ 1850510K 1456516K 699812K 624553K 620960K 206964K TOTAL ZRAM: 208520K physical used for 629248K inswap (4194300K total swap) RAM: 10989740K total, 343872K free, 10312K buffers, 7536160K cached, 20688K shmem, 487084K slab
1. VSS:
Virtual Set Size 虛擬耗用記憶體(包含共享庫佔用的記憶體)
VSS表示一個程序可訪問的全部記憶體地址空間的大小。這個大小包括了程序已經申請但尚未使用的記憶體空間。在實際中很少用這種方式來表示程序佔用記憶體的情況,用它來表示單個程序的記憶體使用情況是不準確的。
此大小還包括可能不駐留在RAM中的記憶體,如已分配但未寫入的malloc。 VSS對於確定程序的實際記憶體使用非常少用。
2. RSS:
Resident Set Size 實際使用實體記憶體(包含共享庫佔用的記憶體)
表示一個程序在RAM中實際使用的空間地址大小,包括了全部共享庫佔用的記憶體,這種表示程序佔用記憶體的情況也是不準確的。
RSS可能會產生誤導,因為它報告程序使用的所有共享庫的總數,即使共享庫只加載到記憶體中一次,無論有多少程序使用它。 RSS也不是單個程序的記憶體使用的準確表示。
3. PSS:
Proportional Set Size 實際使用的實體記憶體(比例分配共享庫佔用的記憶體)
表示一個程序在RAM中實際使用的空間地址大小,它按比例包含了共享庫佔用的記憶體。假如有3個程序使用同一個共享庫,那麼每個程序的PSS就包括了1/3大小的共享庫記憶體。這種方式表示程序的記憶體使用情況較準確,但當只有一個程序使用共享庫時,其情況和RSS一模一樣。
當一個程序被銷燬時,其佔用的那部分PSS又會被按比例地分配給其餘使用這些庫的程序。
4. USS:
Unique Set Size 程序獨自佔用的實體記憶體(不包含共享庫佔用的記憶體)
表示一個程序本身佔用的記憶體空間大小,不包含其它任何成分,這是表示程序記憶體大小的最好方式!
USS是一個非常有用的數字,因為它表示執行特定程序的真正記憶體增量成本。當程序被終止時,USS是實際返回到系統的總記憶體。 USS是判斷程序中的記憶體洩漏時最值得注意的數字。
總結:
一般來說記憶體佔用大小有如下規律:VSS >= RSS >= PSS >= USS