任務管理器中跟內存相關有兩個重要的指標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