有时我会遇到内存不足错误,Windows 事件查看器会显示此信息(翻译):
资源耗尽检测器:成功检测到系统中虚拟内存不足。最大数量的虚拟内存被分配给以下程序:10582为 myapp.exe (12412) 分配了 573056 字节, 916为 firefox.exe (18240) 分配了 819968 字节,794为 firefox.exe (13724) 分配了 206208 字节。
myapp.exe 分配了 10 GB,Firefox.exe-s 总共分配了~4.5 GB,其他一些东西 10x150MB(我稍后在任务管理器中检查),所以总提交应该是 16 GB,但是由于我收到这些内存不足警告,我假设实际提交大约是 34 GB(32 GB RAM + 2 GB 页面文件)。
那个隐藏的、有大提交的东西到底是什么?它既没有在任务管理器进程中显示,也没有被资源耗尽检测器报告?
任务管理器中显示的缓存内存是否计入已提交内存?如果计入,那么为什么当另一个应用程序尝试分配内存以满足其需求时不释放它(据我所知,缓存内存只是填充了未使用的 RAM,当需要该内存时应立即释放)?
这是不同时间的屏幕截图,任务管理器显示已提交 19.3 GB,但如果我将“详细信息”选项卡中分配列中的所有内容加起来,则它是 ~14.3 GB,而不是 19.3。
更新
这不是重复的的资源耗尽检测器:虚拟内存不足,但有足够的 RAM 可用
在之前的问题中,我问过为什么在有可用 RAM 的情况下会出现内存不足的情况,现在我知道答案了 - 因为我的已提交内存不足。现在我要问的是,为什么我运行的内存是已提交的,而实际上没有应用程序会提交那么多内存。它们是不同的。
这些都不能回答我的问题,因为它们是关于物理内存可用但收到内存不足错误,但我问的是为什么没有可用的虚拟内存的原因: