求解释windows操作系统物理内存和虚拟内存的工作原理及重要结论

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求解释windows操作系统物理内存和虚拟内存的工作原理及重要结论相关的知识,希望对你有一定的参考价值。

参考技术A 我们知道每个Windows进程都拥有4G的地址空间,但是你的机器显然没有4G的物理内存。
在多任务环境下,所有进程使用的内存总和可以超过计算机的物理内存。
在特定的情况下,进程的一部分可能会从物理内存中删除而被暂存在硬盘的文件里(pagefile),当进程试图访问这些被交换到pagefile里的内存的时候,系统会产生一个缺页中断(page
fault),这时候Windows内存管理器会负责把对应的内存页重新从硬盘调入物理内存。
注意:
1)在某个时间内,一个进程可以直接访问到的物理内存(不发生缺页中断)叫做这个进程的Working
Set;
2)而一个进程从4G的地址空间当中实际分配(commit)了的、可访问的内存称为Committed
Virtual
Memory。
3)Committed
VM可能存在于Page
File当中,WorkingSet则一定位于物理内存。
Mem
Usage这个名字多少有些误导。它只表示这个进程当前占用的物理内存,也就是WorkingSet。WorkingSet不表示进程当前“占用”的所有虚拟内存,该进程可能还有一部分数据被交换到pagefile当中。这些数据只有在被访问的时候才会被加载到物理内存。
Task
Manager有另一列数据:VM
Size,表示了一个进程分配的虚存(Committed
Visual
Memory)—实际的定义要比这个复杂一些,但我们可以暂时看成“一个进程分配的虚存”。
当一个Windows程序被最小化的时候,Windows内存管理器把该进程的WorkingSet减到最小(根据先进先出FIFO或者最近最少使用LRU),把大部分数据交换到pagefile里。
这很容易理解:我们通常总是希望为前台的应用程序留出更多物理内存,从而具有更好的性能。当该程序从最小化恢复的时候,Windows也不会完全加载程序的所有虚存,只是加载了必要的部分。这也很容易理解:程序启动阶段的代码通常在启动之后很少访问(对.NET程序尤其如此,向fusion这样的模块在程序正常加载之后如果没有用到Reflection通常用不到)。
但是在虚存的问题上却没这么简单。如果WorkingSet太小,程序运行过程中会产生很多缺页中断,这会严重影响程序的性能。另一方面,WorkingSet太大会浪费“宝贵的”物理内存,降低整个系统的性能。
通常情况下(除非是对性能非常敏感的应用程序,并且你对Windows的内存管理了如指掌),建议不要在程序中自己调整WorkingSet的大小,而把这个任务交给Windows内存管理器
我们知道DLL的一个特点是代码共享,以NTDLL.DLL为例,整个Windows系统的几乎所有应用程序(具体地说,Win32子系统的所有程序)都需要引用NTDLL.DLL,如果每人一份,光这个文件就的占用几十兆内存。
Windows地解决办法是只在物理内存中保存一份NTDLL.DLL的COPY,所有引用这个DLL的程序都把这一份COPY映射到自己的内存空间里面,共享NTDLL.DLL的代码段(每个进程的数据段仍然是独立的)。
所以虽然NTDLL.DLL的大小被计算在你的程序的WorkingSet里面,但是从你的程序中去掉对这个DLL的引用并不会真的释放多少物理内存——你不用,别人还在用呢!
所以,你的程序“独占”的物理内存远没有Mem
Usage所表示的那么多,需要从Mem
Usage里面扣除很多Shared
Code
Page
(vadump里面可以看到)。
重要结论:
不要参考Task
Manager的Mem
Usage数据,那个数据的大小对程序性能没有直接影响。

电脑是先使用内存条实际内存,还是先用虚拟内存

参考技术A 优先使用物理内存,把那些调用率低的放在缓存里 参考技术B WINDOWS的内存机制是,同时使用物理内存和虚拟内存。只要你设置了虚拟内存,那么不管物理内存是否用完,windows都会去调用大量虚拟内存。所以对于WINDOWS来说,只要物理内存足够大,那么就绝对不要设置虚拟内存。虚拟内存只是为了补足物理内存的不足而存在的,虚拟内存设置的越大,系统响应速度就越慢。
LINUX的内存机制是,优先用物理内存,用完物理内存后再使用虚拟内存。且linux会将很多程序都缓存到内存里,所以经常会发现linux的内存始终是满的,但是在你需要的时候,linux会在很短时间内释放出足够的内存空间来公你使用。
参考技术C 这两个 内存 是不同用处的....

以上是关于求解释windows操作系统物理内存和虚拟内存的工作原理及重要结论的主要内容,如果未能解决你的问题,请参考以下文章

在Windows7系统中设置虚拟内存大小

电脑是先使用内存条实际内存,还是先用虚拟内存

谁能概括一下windows是如何管理内存的?

server2008物理内存使用82%导致程序内存错误

Windows地址空间

假设电脑的物理内存为8GB,一个SATAⅡ硬盘,容量为1TB,现在需要安装Windows10和centOS7?