@
wxf666 没有对应的概念。Linux 和 Windows 内核用着完全不同的机制。
比如 Linux 下你先开一个实际占用 1G 的进程,然后 fork 一下,现在你就有了两个实际占用 1G 但合在一起仍然只占用 1G 的进程。
但 Windows 下的普通 win32 程序没有这个功能。两个实际占用 1G 的进程,会占用 2G 内存。
比如 Linux 内核默认开启 memory overcommit (/proc/sys/vm/overcommit_memory )
0 – overcommit, but refuse any unreasonable memory request on the heuristics base.
也就是说,如果你有 8G 内存和 2G swap ,你程序可以申请 20G 内存,无事发生。
但是 Windows 上没有 memory overcommit ,这意味着如果你有 8G 内存和 2G pagefile ,你申请超过 10G 必然触发内核杀进程。或者反过来说,如果你有 8G 内存而你申请 20G ,Windows 就必须先把 pagefile 扩大到 12G 然后再把内存返回给你。
Linux 的 RSS 和 Windows 的「内存」占用是类似的(在不考虑 COW 的情况下)。内存占用指的是去掉被挤进 swap/pagefile 以后,仍然留在物理内存里的占用量。
这意味着如果开着一个浏览器,假设它占用 4G 内存,然后你启动一个大型游戏(比如天际线 1 ),占满内存并把浏览器从内存里挤出去,然后你切出来就会发现浏览器现在只占 100M 内存了。这并不表示浏览器变得更省内存,只能说浏览器的大部分内存被分页到硬盘里去了。等你下次切回浏览器窗口的时候,内核再把内存分页从硬盘中换回来,造成卡顿。