windows - Windows 内存管理器用于确定何时开始将页面交换到磁盘的阈值是多少?

标签 windows memory virtual threshold

我在 Perfmon 计数器“内存”-“工作集”描述中看到此评论:

If free memory in the computer is above a threshold, pages are left in the Working Set of a process even if they are not in use. When free memory falls below a threshold, pages are trimmed from Working Sets.

我尚未找到有关此阈值的任何文档。它是可用 RAM 的百分比?是在 Commit Charge 耗尽所有可用 RAM 时吗?系统如何处理内核页面和用户模式页面?

所以我的问题是:

  • 这个阈值是多少?
  • 有办法检测到吗?
  • 不同版本的 Windows 是否有不同的行为或阈值?

情况是我的进程将尝试使用与可用物理 RAM 一样多的内存。一旦达到该限制,我可以在磁盘上取消分配并缓存某些内存块,为新内容腾出空间。这样做是为了在内存不足时帮助缓解页面文件抖动。我想在内存管理器开始将页面交换到磁盘之前执行释放,因为内存使用量已超过神奇阈值。

我当前使用 MEMORYSTATUSEX::ullAvailPhys 值(由 GlobalMemoryStatusEx 填充)来标识可用物理内存量。

最佳答案

Windows 为程序和磁盘缓存使用尽可能多的 RAM,因此它在某些时候不会进行大量交换...

如果您需要更多 RAM 来运行应用程序,则必须减少磁盘缓存。

SysInternal 有一个设置磁盘​​缓存的工具。

cacheset.exe

您可以在这里找到它:

http://technet.microsoft.com/en-us/sysinternals/bb897561.aspx

关于windows - Windows 内存管理器用于确定何时开始将页面交换到磁盘的阈值是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10220136/

相关文章:

c - 指针在内存中的作用域

c# - 使用虚拟属性支持 NHibernate 代理; ReSharper 警告构造函数中的虚拟成员调用

c++ - 多层继承C++

mysql - 是否可以为 gnome 编写代码然后将其构建到 Windows?

windows - 更新 AD 中的用户信息

c# - 确定 Windows 应用商店应用程序是否已从 Windows 服务中暂停或逻辑删除

java - 内存不足错误: Java heap space when trying to create ArrayList

64 位 jvm 上的 Java 内存不足

c++ - 神秘的编译器错误,可能与使用 "virtual"有关?

java - 如何找到每个java进程?