VMMap名词说明
Committed: 进程向OS宣称要使用的内存大小(在虚拟内存进行了分配),基本上都不等于进程实际使用的物理内存大小。一是其中统计了进程所链接的所有动态库的空间,比如标准C库,而实际上OS在内存中只加载一份C库的代码段,所有进程共享使用。但每个进程在运行时,依然要在自己的虚拟内存空间为C库分配好地址,OS的动态库管理程序会进行映射;二是OS分虚拟内存和物理内存。32位电脑上,每个进程的虚拟内存空间可达4GB。当进程malloc()申请10MB空间时,先在虚拟内存中预留出10MB的地址空间(统计入Committed),但只有在真正读写这10MB空间时,才会通过缺页中断去创建对应的物理内存,并在进程的Total WS(WorkSet)中体现。所以Committed相对于进程实际使用的物理内存都比较大。
Private Bytes:上面的Committed包含了很多共享库的内存,Private Bytes则是属于进程独占的内存。比如一个动态库,虽然代码段是共享的,但数据段是每个进程各自拷贝一份并维护。Private Bytes依然不完全等于进程使用的物理内存,它是进程独占的虚拟内存大小统计。
Working Set: 进程使用中的物理内存,包含了进程独占的物理内存和可共享的物理内存(主要是共享库所使用的物理内存)。注意:使用“使用中”,是为了强调进程只是正在使用这块物理内存,但并不代表全部是由进程申请的。