什么是虚拟内存 (Virtual Memory)?
在32位计算机里
,内存地址有32位长度
,因此,32位计算机有4GB的内存访问限制,2的32次方=4,294,967,296
。
Intel 386及之后的处理器,能寻址4GB的内存,每个进程能分配到4GB虚拟内存中的某个地址
空间,而不管物理内存有多大
。同时每个进程独立于其它的进程,并拥有自己的4GB地址
空间。也就是说,4GB的访问限制是基于每个应用程序的,而不是由所有应用程序的总和所限制。
这就意味着计算机上的物理内存与内存地址空间无关,如果计算机有256MB的物理内存,那么内存地址空间仍然有4GB,如果计算机有8GB物理内存,那么内存地址空间依旧只有4GB。
程序是不允许直接访问物理内存的,当一个程序请求更多的内存,Windows便映射物理内存到进程的地址空间中。
按照程序所需要运行的尽可能多的内存,计算机硬件总是会满足,只有当前正在运行(active)的那部分被加载到物理内存中(RAM),Windows维护一些页面表,以便跟踪,应用程序只能看到虚拟内存地址。
处理器自己能从指令中转换(映射)这些虚拟地址到相对应的物理内存中去,处理器管理这些映射页表,每个页表为4KB。
当计算机运行时内存不足,就需要
优化页面文件,当所有的物理内存被使用,Windows便开始利用硬盘,就好像有额外的RAM一样。这就是为什么有Page file页面文件,我们也称之为交换文件Swap file。y因为物理内存的访问速度远快于硬盘,无论何时计算机为减轻物理内存的压力开始使用页面文件,我们便能明显的感觉到计算机性能的下降。
最有效的解决办法就是增加足够的物理内存,来避免频繁的从物理内存到硬盘之间的页面交换。
这也意味着应用程序使用内存数量的限制实际上就是物理内存加上页面文件大小。
你需要多大的交换空间?这依赖于你有多大的物理内存和使用程序的多少。通常我们需要物理内存的1.5倍,除非系统的负载更多。
有大容量内存的计算机上能否关闭虚拟内存?
严格说,虚拟内存是时刻在运行且不能被关闭,那么“让系统不使用虚拟内存”又会导致什么结果?
答案是这样做会浪费一部分内存,原因是当程序请求分配虚拟内存空间时,可能会请求远比自身运行所需的多得多的内存(也许会超过100MB),这些地址由系统来分配,如果有可用的页面文件,系统就分配给它,如果没有,他们将会被分配到物理内存(RAM),然后锁住这些空间(无论它是否需要使用)。
如何具体的优化?
下面介绍一些具体的方法:
最需要也是最重要的就是增加物理内存RAM。当应用程序运行时,系统性能就会下降,增加足够的物理内存能保证提供足够的程序所需的内存,而不是频繁的增加页面文件。
把页面文件从系统启动分区移到另外的单独的硬盘上。如果你这么做,你应该在C盘(通常是系统启动分区)留一些页面文件,可以设置成初始值2MB,最大值50MB,我觉得差不多了,这样做可以应急。如果没有这个页面文件,某些情况下,系统会无视已有的页面文件配置,认为当前没有页面文件或者会在C盘下自行的建立一个很大容量的页面文件。
将页面文件所在的分区格式化成NTFS。簇大小4Kb(默认设置)。
将页面文件的初始值设置得和最大值一样大。尽管这样做会占用更多的硬盘空间。我们不想让页面从一开始很小,慢慢的不断增大。写入大文件时(也需要很大的页面文件),硬盘非常的忙碌,会导致系统性能下降,因此,让页面文件不断的增长,很可能会产生页面文件碎片,这样会更加重硬盘的负担。
不要在同一个硬盘上的不同分区设置多个页面文件。
如果有RAID-0阵列,用它来放置页面文件。
不要把页面文件存储在容错磁盘上。比如镜像卷RAID-1,或者RAID-5卷,页面文件不需要容错。
如果你使用Windows XP,开启了Fast User Switching功能,需要特殊考虑。当用户处于非活动状态,会需要更多的页面文件,到底需要多大的页面文件很难计算,有一种观点是初值可以设置成物理内存RAM的一半。
最好有一块单独的硬盘用于存放页面文件,不要在有系统启动分区的硬盘上存放页面文件,否则不会提高系统性能,硬盘最好是连接在独立的磁盘控制器上。或者也可以把页面文件放在多个硬盘上,不必担心不同硬盘的速度差异,Windows 2000/XP/2003会自动选择最快的那个硬盘存放页面文件。
页面文件PageFile 应该设为多大?
让Windows自己选择最佳的页面文件大小,推荐初值值为物理内存的1.5倍,最大值为物理内存的3倍。举例,如果你有256MB的物理内存,页面文件的最小值为384MB,最大值为1152MB。
当前这只是一种偷懒的办法,更为精确的方法是你自己监视系统,看看有多少物理内存和虚拟内存在使用。观察一个星期,看看系统在这期间用过最大数量的内存,如果你看到这个最大值从未接近你的物理内存,那就不用担心了,你的页面文件还没有使用过(这个说法不完全正确,因为系统总是为内部的操作而使用页面文件,一般用5%-10%)。相反,如果你看到期间系统使用的内存最大值已经超过了物理内存,那么就意味着系统已使用了页面文件。
我的系统使用了多少页面文件?
你应该首先计算出正在使用的内存数量,有多少存储在硬盘?
使用用系统监视器 System Monitor
在系统监视工具里使用 %Usage Peak 计数器。
使用任务管理器
物理内存这一块,总数为785904 K,就是安装的物理内存,当前使用了多少RAM?372924 K,差不多物理内存的一半,OK,没有问题。系统调用了多少内存?来看看Commit Charge section,总数(Total)为429604 K。自上次启动后系统调用内存的最大值为多少?来看峰值为453168 K,使用量接近峰值,不过这离物理内存还差很远,因此当前系统ok。
其它设置
注册表设置
有时候系统无法保存当前设置,可以如下解决。
1、运行注册表 regedt32.exe(注意不是regedit.exe)
2、找到 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management
3、双击 PagingFiles,比如显示 D:\pagefile.sys 700 700,第一个是页面文件的位置,第二个是最小值,第三个是最大值。
4、修改完毕后,重启计算机。
远程改变页面文件大小和位置
用 resource kit工具 REG.EXE。
语法为:
C:\> reg update "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\PagingFiles"=" " \\
举例:
C:\> reg update "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\PagingFiles"="C:\pagefile.sys 700 700" \\example.localhost.computer
页面文件碎片整理
可以从这里下载整理工具 http://technet.microsoft.com/en-us/sysinternals/bb897426.
aspx
组策略设置
创建一个页面文件
Computer Configuration\Windows Settings\Security Settings\Local Policies\User Rights Assignment
可以设置哪个用户或组可以创建页面文件、该变其大小,默认是管理员。
关机时清除页面文件
Computer Configuration\Windows Settings\Security Settings\Local Policies\Security Options
可以设置关机时页面文件是否被清除。清除页面文件可以保证页面文件里的敏感信息不被未授权人利用。
虚拟内存的错误提示
有时候系统会提示虚拟内存不够,或者在启动程序时遇到提示缺少内存,可能由以下原因。
1、页面文件的最大值设置过小,或者页面文件所在的硬盘或分区空间不够。
2、页面文件损坏,可能由非正常关机引起,解决办法是把虚拟内存设置成没有页面文件,重启计算机,然后再次设置正确的页面文件。
3.页面文件存在在另一个硬盘上,但是却没有在C盘(系统启动分区)下设置一个小的页面文件。
5、也可能是IDE硬盘的驱动程序引起,在设备管理器里,删除 IDE ATA/ATAPI controllers(主控制器),重启计算机让系统自己识别并安装。
6、在NFTS的文件系统里,页面文件所在的分区必须有足够的权限,应该是分配 Full Control。