1. 虛擬內存與物理內存
物理內存對於進程來說是透明的,進程直接操作的是虛擬內存。
而數據和代碼是存放在真實的物理內存的,之所以進程在虛擬內存中尋址可以獲取數據,是因為虛擬內存與物理內存存在著映射關係。
内存占用大小
VSS >= RSS >= PSS >= USS
VSS - Virtual Set Size 虛擬耗用記憶體(包含共享庫佔用的記憶體)
RSS - Resident Set Size 實際使用實體記憶體(包含共享庫佔用的記憶體,含棧記憶體和堆記憶體)
PSS - Proportional Set Size 實際使用的實體記憶體(PSS相對於RSS計算共享庫內存大小是按比例的。N個進程共享,該庫對PSS大小的貢獻只有1/N。PSS計算更加科學,除了自己獨占的內存,再加上分到的共享部分)
USS - Unique Set Size 程序獨自佔用的實體記憶體(不包含共享庫佔用的記憶體)
VSZ是 Virtual Memory Size (包含了程序所能訪問的所有記憶體,包含了被換出的記憶體,被分配但是還沒有被使用的記憶體,以及動態庫中的記憶體)
PID Vss Rss Pss Uss cmdline
190 79560K 74736K 49624K 43604K system_server
14335 55776K 55740K 31308K 26676K com.android.launcher2
13074 47408K 47380K 24947K 22428K com.android.settings
假設程序A的二進位制檔案是500K,並且連結了一個2500K的動態庫,堆和棧共使用了200K,其中100K在記憶體中(剩下的被換出或者不再被使用),一共載入了動態庫中的1000K內容以及二進位制檔案中的400K內容至記憶體中,那麼:
RSS: 400K + 1000K + 100K = 1500K
VSZ: 500K + 2500K + 200K = 3200K
前面例子中的動態庫如果是被兩個程序使用
PSS: 400K + (1000K/2) + 100K = 400K + 500K + 100K = 1000K
Reference:
https://www.twblogs.net/a/5cbf2b04bd9eee397113c09e
No comments:
Post a Comment