一般來說內存占用大小有如下規律:VSS >= RSS >= PSS >= USS
-
VSS - Virtual Set Size (用處不大)
虛擬耗用內存(包含共享庫占用的全部內存,以及分配但未使用內存)。其大小還包括了可能不在RAM中的內存(比如雖然malloc分配了空間,但尚未寫入)。VSS 很少被用于判斷一個進程的真實內存使用量。
-
RSS - Resident Set Size (用處不大)
實際使用物理內存(包含共享庫占用的全部內存)。但是RSS還是可能會造成誤導,因為它僅僅表示該進程所使用的所有共享庫的大小,它不管有多少個進程使用該共享庫,該共享庫僅被加載到內存一次。所以RSS并不能準確反映單進程的內存占用情況
-
PSS - Proportional Set Size (僅供參考)
實際使用的物理內存(比例分配共享庫占用的內存,按照進程數等比例劃分)。例如:如果有三個進程都使用了一個共享庫,共占用了30頁內存。那么PSS將認為每個進程分別占用該共享庫10頁的大小。 PSS是非常有用的數據,因為系統中所有進程的PSS都相加的話,就剛好反映了系統中的 總共占用的內存。 而當一個進程被銷毀之后, 其占用的共享庫那部分比例的PSS,將會再次按比例分配給余下使用該庫的進程。這樣PSS可能會造成一點的誤導,因為當一個進程被銷毀后, PSS不能準確地表示返回給全局系統的內存。
-
USS - Unique Set Size (非常有用)
進程獨自占用的物理內存(不包含共享庫占用的內存)。USS是非常非常有用的數據,因為它反映了運行一個特定進程真實的邊際成本(增量成本)。當一個進程被銷毀后,USS是真實返回給系統的內存。當進程中存在一個可疑的內存泄露時,USS是最佳觀察數據。
參考資料:
http://myeyeofjava.iteye.com/blog/1837860
http://blog.csdn.net/panda1234lee/article/details/52291588