当我运行htop(在OS X 10.6.8上)时,我看到这样的事情:
1 [||||||| 20.0%] Tasks: 70 total,0 running 2 [||| 7.2%] Load average: 1.11 0.79 0.64 3 [|||||||||||||||||||||||||||81.3%] Uptime: 00:30:42 4 [|| 5.8%] Mem[|||||||||||||||||||||3872/4096MB] Swp[ 0/0MB] PID USER PRI NI VIRT RES SHR S cpu% MEM% TIME+ Command 284 501 57 0 15.3G 1064M 0 S 0.0 6.5 0:01.26 /Applications/Firefox.app/Contents/MacOS/firefox -psn_0_90134 437 501 57 0 14.8G 785M 0 S 0.0 4.8 0:00.18 /Applications/Thunderbird.app/Contents/MacOS/thunderbird -psn_0_114716 428 501 63 0 12.8G 351M 0 S 1.0 2.1 0:00.51 /Applications/Firefox.app/Contents/MacOS/plugin-container.app/Contents/MacOS/ 696 501 63 0 11.7G 175M 0 S 0.0 1.1 0:00.02 /System/Library/Frameworks/QuickLook.framework/Resources/quicklookd.app/Conte 38 0 33 0 11.1G 422M 0 S 0.0 2.6 0:00.59 /System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framewo 183 501 48 0 10.9G 137M 0 S 0.0 0.8 0:00.03 /System/Library/CoreServices/Finder.app/Contents/MacOS/Finder
如何使用千兆字节的VIRT内存并且仍使用0MB的Swap进程?
解决方法
VIRT与已用内存(虚拟或其他)没有任何关系,但与已使用的地址空间无关,这与您可能认为的不相关.
现代操作系统(包括OSX)具有称为demand paging的功能,其通过告知操作系统将虚拟地址空间的某个区域映射到文件(例如共享库/ DLL)来工作.只有当程序试图读取文件加载到内存中的那些虚拟地址时.
如果这些共享库实际上是共享的,那么操作系统实际上将跨多个进程共享物理内存;也就是说,这些数十亿字节的大量不仅是文件支持的库,而且也是相同的文件支持的库.
此外,如果需要暂存(对于数据;设置,位图,声音等),并且没有任何物理页面未使用,操作系统实际上会丢弃这些文件支持区域的内容并将它们提供给您的应用程序.如果再次需要这些页面,操作系统可以简单地从磁盘重新加载它们.
Swap(SWP)是该临时存储器的特殊文件支持区域.创建交换空间将允许操作系统将临时内存移动到磁盘而不是(由更多正在运行的进程使用)共享库,通常可以提高性能,也许最令人惊讶的是,产生的交换少于没有交换空间的交换空间.