任务管理器显示我的总内存使用量为 6 GB 的 90%,但没有一个进程使用的 RAM 超过 250 MB,所有正在运行的进程的 RAM 使用量总和不到 2 GB。我试过:
- 查看 Windows 8 任务管理器的“进程”选项卡上“内存”列中的数字。
- 查看任务管理器“详细信息”选项卡上的“工作集”、“私人工作集”、“共享工作集”和“提交大小”列。
- 查看 Process Explorer 中类似的与内存相关的列。
- 我尝试运行 Sysinternals RAMMap,但在遇到内存不足危机时,它在启动时崩溃。一旦我解决了这个问题,RAMMap 就可以正常运行,但那时已经太晚了。
全部显示正在使用的内存量相当小。
互联网上有很多人使用各种版本的 Windows 询问类似的问题。他们中的一些人设法解决了内存不足的问题,通常是通过重新安装软件;有时是通过从头开始重新安装 Windows。我正在寻找这些问题的答案,这些问题似乎在其他地方从未得到过解答:
- 为什么无论我如何计算,总使用的内存都比所有列出的进程使用的内存高得多?
- 如果不知道哪个程序正在使用内存,Windows 怎么能“知道”内存已被使用呢?
- 哪些进程可能会耗尽内存但不会出现在列表中?
- 是否有任何软件可以提供有关已用内存的更多信息?
我自己的问题的具体细节:自从升级到 Windows 8.1 以来,我一登录就会出现问题。我一运行任何程序就会耗尽内存。我在 Process Explorer 中注意到 iexplore.exe 的几个实例正在运行,似乎是自动启动的。一个特定的实例只使用了几 MB 的 RAM,但显示了数亿个页面错误。一时兴起,我杀死了那个特定的进程,内存使用量立即下降了 70%。
引出一个具体问题:
- 怎样才能终止一个仅使用几 MB 的进程并释放几 GB 的空间?
还有一个(可能很难的)附加问题:
- 除了重新安装 Windows 之外,我怎样才能避免每次重新启动计算机时都要经历这一过程?
答案1
顺便说一句,你应该尽量不要使用“内存”这个词。它会引起很多混淆。如果你指的是物理内存,就说“物理内存”或“RAM”。如果你指的是虚拟内存,就这么说。如果你指的是后备存储,就这么说。
为什么无论我如何计算,总使用的内存都比所有列出的进程使用的内存高得多?
因为除非别无选择,操作系统不会浪费物理内存(RAM)。
如果不知道哪个程序正在使用内存,Windows 怎么能“知道”内存已被使用呢?
因为没有程序在使用它。例如,考虑包含刚刚终止的程序代码的内存。没有程序在使用它。但是该内存被使用,因为它不是空闲的并且包含可能有用的数据(以防程序再次运行)。
哪些进程可能会耗尽内存但现在出现在列表中?
它不被进程使用。
是否有任何软件可以提供有关已用内存的更多信息?
内存地图可以做到这一点。
只有两种可能,RAM 可以使用或被浪费。显然,第一种更好。任何空闲的内存都会被永远浪费——一台 4GB 的机器不能为了明天使用 6GB 而今天使用 2GB。如果你在想“我现在想要空闲的内存,以便以后使用”,那就别想了。你现在可以使用它和稍后再用。
怎样才能终止一个仅使用几 MB 的进程并释放几 GB 的空间?
您的后备存储不足,而不是物理内存不足。您有足够的可用物理内存,但后备存储不足以让操作系统继续分配可能需要后备的虚拟内存。
该进程仅使用几 MB 的物理内存,但操作系统可能必须为其保留几 GB 的备用虚拟内存。例如,假设某个进程创建了一个 2GB 文件的可写私有内存映射。操作系统必须为该进程保留 2GB 的备用虚拟内存,因为它可能会写入该映射的每一个字节。此外,它可能永远不会写入其中任何一个。这就是为什么您需要一个大小合适的分页文件。
现代操作系统会开出大量永远不会兑现的支票(承诺有备用存储)(需要 RAM)。如果您已经开出了许多可能会兑现也可能不会兑现的大额支票(承诺有尽可能多的备用存储),那么即使您在银行有很多钱(可用 RAM),您也无法继续开出支票(承诺有备用存储)。分页文件添加了备用存储,使操作系统可以继续开出支票。