Mac 的 memory 和 real size memory 有什麼區別?

活動監視器裡頭,有一個 memory 列,雙擊進去後,會有一個 real size memory,這兩個有什麼區別嗎?到底是哪個佔據了真實的內存?


這是 OS X 裡面比較噁心的地方,

以 Photos 為例,

首先,確認一點,Real Mem 列是該進程消耗的物理內存大小。但是這一列 OS X 默認不顯示,而是以 Memory 列表示該進程內存佔用。簡單來說,Memory = Real Mem+Compressed Memory (被壓縮的部分)-Purgeable Mem。因為 Purgeable Mem 是可以在操作系統需要時被隨時搶佔的內存部分,那麼這裡的內存可以被認為是 Free 的,所以,Memory 顯示的內存佔用,是減去這塊內存後計數的。

你可能會說,有時候對不上,總是差一些,這是由於採樣、換算、壓縮 (有時候壓縮完了比壓縮前還大一點) 導致。

一般來說,看 Mem 列就可以了,雖然這是個理論值,但是能夠反映真實的系統狀態,以及影響到最終的 Memory Pressure 計算,所以你看雖然物理內存佔用很多,但是 Memory Pressure 壓力正常,就是因為很多被實際佔用的物理內存可以被隨時視作空閑內存佔用。

另外有同學要問,為什麼我用 Top 命令,看到的是另外一個數值:

實際上,這是由於 Top 命令在 OS X 下不能正確識別被壓縮的內存部分導致的。很噁心。

另外,你還能看到:

Virtual Memory Size (VSIZE),這是指進程地址空間大小,這個你不用管,64bit 內存地址空間全部展開會嚇死你,所以這裡出現什麼 十幾GB,幾十GB 都小意思。

Private Mem (RPRVT),表示已經被載入到物理內存中的進程私有數據所對應的虛擬內存地址空間大小。

Shared Mem (RSHRD),表示已經被載入到物理內存中的進程共享數據所對應的虛擬內存地址空間大小,這部分區域被一個或以上的進程共享。比如共享庫,使用 **shm_open** 映射的匿名共享頁面,FIFO 等,這些頁面大小會在每一個使用此共享頁面的進程中被計算一次。

RPRVT RSHRD 這樣的,都是地址空間大小,計算方法並非物理內存按照實際佔用的 byte 計算,而是以頁面大小的整數倍計算。


推薦閱讀:

求推薦可以替代MacBook的PC或超極本?
蘋果電腦需要裝殺毒軟體嗎?如果需要裝什麼最好?
女朋友一直不願換用 OS X,怎麼勸她捨棄 Windows?
剛拿到 MacBook,我要做些什麼?

TAG:Mac | macOS | OSX開發 | 內存RAM | 內存管理 |