工作管理員中跟記憶體相關有兩個重要的指標Private(提交大小)和working set(工作設定)。如所示:
這兩個指標在process explorer中叫做Private Bytes和Working Set。
而在VMMap中,他們則分別被叫做Private和Total Working Set。我這裡也用Private和working set來稱呼他們。
他們經常被用來標識一個進程到底佔用了多少記憶體,你知道他們分別代表什麼嗎?
Private指的是當你修改他時僅僅當前進程會受到影響。(copy-on-wirte屬性的頁面還沒被修改時也屬於此類)。這類一般包括Heap,stack和image的copy-on-write的部分。Private是虛擬記憶體的概念,其對應的記憶體可能被實體記憶體backup,也可能被paging file backup。比如用new來建立一個100M的記憶體時,private就增加100M,但是這塊記憶體在被訪問之前,實際上是paging file backup的,實體記憶體並沒有真正佔用。(win7下測試所得)
Working set是指實體記憶體。但是這個實體記憶體既包括了屬於當前進程的私人實體記憶體(Private Working set)。也包括了可以共用的Working set(Sharable Working Set)。Private Working Set 就是前面的Private的一部分,Private的另外一部分由paging file backup。
在VMMap中,還有一個概念是Committed,它也是虛擬記憶體的概念,其實可以分為Private的虛擬記憶體和可以共用的虛擬記憶體。而可以共用的虛擬記憶體的由實體記憶體backup的部分就是sharable working set。
所以:
從私人和可共用的角度來看:
Committed = Private virtual memory + sharable virtual memory
從memory由什麼back up來看:
Committed = memory backed by paging file + working set
Private Virtual Memory = Private Working set + private memory backed by paging file
Working set = private working set + sharable working set