Windows 会保留一些内存供其内部使用,这些内存通常不会分配给应用程序。如果您在不使用页面文件的情况下运行或将页面文件限制为相对较小的大小(例如 3GB),则最容易看到这种保留。Windows 将主要分配 RAM,直至达到限制,填充页面文件中的剩余可用空间(如果有),并在没有剩余页面文件空间且分配的 RAM 限制超出时发出内存不足警告。
该限制似乎是系统总 RAM 的百分比。 Windows 7 x64限制在这里讨论,并规避“低内存警告”的方法是这里讨论。
禁用低内存警告有一些优点 - 您可以在 8GB 机器上使用多 600MB 的 RAM)但是有一个严重的缺点 - 当内存不足时,程序就会崩溃。
在收到内存不足警告之前,您可以在 8GB Windows 8 x64 上分配多少 RAM?是否可以调整警告阈值?
编辑:我无法亲自回答这个问题,因为为了争论而争论,所以它被关闭了。不过我在这里回答了: 16GB x64 Windows 的“低内存警告”阈值是多少?
简而言之,是的,Windows 8.1 x64 的行为方式与 Windows 7 x64 相同。如果您的 Commit 限制 - Commit 电量不足,则仍会尽可能保留相当大比例的 RAM。这是通过将更多内容移入页面文件来实现的。
答案1
这种行为是现代内存管理所固有的。如果可用的后备存储(页面文件或交换空间)数量相对于物理内存数量不足,则几乎每个现代虚拟内存操作系统都会发生这种情况。
如果您查看 Windows 系统上的现代应用程序,您会发现它们的工作集(它们正在使用的物理内存)往往会比它们的提交大小(操作系统向它们承诺的虚拟内存)小一点。
例如,在我的 Windows 台式机上,我用来输入此答案的浏览器使用了 207MB 的 RAM,但操作系统已经承诺为其提供 280MB 的虚拟内存。这意味着,在任何一秒钟,浏览器都可以使用 280MB 的虚拟内存,而无需向操作系统请求许可,只需访问它已有的映射即可。操作系统要么需要为该进程提供这部分内存,要么必须强制终止它,无法履行它已经做出的承诺。
如果没有任何后备存储,只有物理 RAM,则必须为该应用程序保留 73MB 的额外 RAM。即使浏览器只使用了 207MB 的 RAM,它也可以通过使用已分配的内存(操作系统尚未实际分配给它,只是保留)而膨胀到 280MB。
如果操作系统有足够的后备存储空间来处理所有承诺,那么它可以继续做出承诺。但如果没有,它就被迫做出一个令人不快的选择。它可以告诉应用程序它不能再做出任何承诺,即使有足够的可用 RAM。或者它可以授予应用程序承诺,但当应用程序开始使用它们已经分配的资源时,必须强制终止它们。
解决方案很简单,配置充足的后备存储。这以前不是问题。每个人都有数百 GB 的巨型磁盘。因此,添加与物理内存相等的后备存储不是问题。然而,最近配备小型 SSD 的机器变得越来越普遍。因此这又成了问题。
请注意,无需触碰页面文件即可解决此问题。操作系统只需知道在极少数情况下(即同时调用大量承诺)可用即可。这种情况几乎从未真正发生过——这有点像内存库的运行。
答案2
(有关用户和内核模式虚拟地址空间限制等的更多详细信息,请参阅完整表格。)
用红色突出显示的部分可能就是您关于 25% 限制的想法的来源。是的,在 32 位版本的 Windows 上,安装的 4 GB RAM 中只有约 3 GB 可用于 32 位进程,而 Windows 8 并没有神奇地改变这一点。至于为什么会这样,我不会费心重复互联网上已经详细解释过这一点的所有文章,包括 Jeff Atwood 的兄弟,我的 4GB RAM 去哪了?