1. 程式人生 > 其它 >Android開發中記憶體 VSS、RSS、PSS、USS 的區別

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 in
swap (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