“虚拟内存”,应该指的是页面文件(paging file,pagefile.sys),是操作系统将部分虚拟内存页面换到磁盘上存放的数据。作者:Jirap Chung
链接:http://www.zhihu.com/question/20728404/answer/43884829
来源:知乎
著作权归作者所有,转载请联系作者获得授权。
实际上并不能太过神化操作系统内存交换算法。内存页发生交换,并不是想象中“不够用”的时候发生的,也就是说,就算你有100G的内存,这样的交换还是每时每刻会发生的,因为系统运行的过程中,总会存在不活跃的进程,经过一系列的系统调度算法过后,即使系统可用内存量富余,还是会被交换到硬盘中。有人说“有些软件”没有虚拟内存会出错,会无法运行,这个绝对是一个误解。现代操作系统的存在很大一个作用是分配、管理和保护资源,没有任何一条操作系统相关的函数是能够“显式”地把内存分配到“虚拟”内存里面,软件本身也没有权限直接指示操作系统什么时候进行内存页交换。普通软件能做的,只是能够告诉操作系统“我现在需要xx大小内存”,和“这部分内存我不需要了,你随意处理”。另外请思考一个问题,原本2G内存,虚拟内存3G的情况下,系统能正常运行,为什么物理内存8G,虚拟内存0G就不能正常运行呢?很多人说是因为负荷小,才没出问题,但是需要注意的是,负荷足够大的情况下,2G内存+3G虚拟内存,一样会发生不稳定和造成系统崩溃的情况,因为即使交由托管虚拟内存大小,系统也不可能无限制地去把硬盘空间分配为虚拟内存,所以因为内存占用问题而造成的系统稳定性降低,最根本的原因是物理内存size的问题,而不是因为没有打开虚拟内存。最后再强调一个,windows内核中关于内存的管理策略,是针对大多数情况下做出的策略平衡,并不会过于倾斜向特别小的内存或者特别大的内存的情况。如果有超过8G,或者16G甚至更大的内存的情况下,而本身的用户程序并不是太过占用内存,再发生内存页交换,是毫无意义的,反而让本来的空闲内存得不到充分利用。