为什么 Windows 会终止进程或不允许它们分配更多内存,即使有一些可用的 RAM

为什么 Windows 会终止进程或不允许它们分配更多内存,即使有一些可用的 RAM

这个问题是继上一个问题之后的如何精确分析Windows 7的内存使用情况?

为什么在一个实际进程仅占用大约 40% 物理内存(私有工作集)而其余部分以某种方式被操作系统神秘地占用的系统上,内核不允许进程分配更多内存,即使仍有大约 800MB 的零内存?

记忆

是否可以更改内核设置,以便我可以使用 100% 的运行内存?现在,在任务管理器中,当我达到 80% 的内存使用率时,内核的行为就像是 100% 一样,因为这是应用程序开始崩溃且无法分配内存的临界点。我如何释放这 20% 才能利用我拥有的所有内存,直至 100%?为什么这 20% 是“保留的”,用于什么目的?系统是 Windows 7 64 位,总共有 4GB 的 RAM。出于性能原因,交换被禁用。(硬盘非常慢,启用交换会使计算机几乎无法使用)

答案1

私有工作集不是进程的全部内存:

专用字节、工作集、虚拟大小

虚拟大小是程序运行时可能需要的内存总量。许多程序不会使用分配给它们的所有虚拟内存,但它们会请求虚拟内存以确保它们有足够的内存来执行您请求的任何操作。虚拟大小还用于内存映射文件和其他更易于作为内存执行的操作(共享内存空间,IPC),但与请求私有内存的进程没有严格关系。

为了实现这一点,操作系统必须:

  • 保证内存可用
  • 拒绝内存请求(大多数情况下,这将在应用程序崩溃/退出时返回)

通常情况下,系统会将这些未使用的虚拟内存分配到页面文件中,然后只有实际使用的部分才会占用物理 RAM。但是,通过禁用页面文件,您将强制操作系统使用物理内存来提供这些保证。这意味着您将得到大量无法分配给其他进程的零内存页面。

当您有页面文件时,进程只需要介于 和 之间的物理内存Working SetPrivate Bytes。当您禁用页面文件时,Windows必须为其分配全部Virtual Size内存,或者拒绝内存请求。(在 Windows 的资源监视器中,这是该Commit列,因为 Windows 是提交该进程的虚拟内存量。

答案2

资源监视器应该显示您是否确实有任何可用内存。

资源监控

另请参阅删除 8GB RAM 机器上的页面文件有什么好处或坏处吗?

相关内容