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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM