如何在 Windows 8 上设置内存优先级?

如何在 Windows 8 上设置内存优先级?

我可以在 Windows8 中设置内存使用优先级吗?我想让某些程序(特别是 JavaW)优先访问可用的 RAM。

答案1

Windowspage priority自 Vista 起就有了。您可以使用进程黑客来设置。值1是最低的,5是最高的(默认值):

在此处输入图片描述

答案2

抱歉,但没有办法做你想做的事。

您可以设置进程的“内存优先级”,但效果非常有限。没有设置可以让进程比默认设置获得更多的可用 RAM 访问权限,因为默认内存优先级 (5) 是您可以设置的最大值。(有值 6 和 7,但它们仅可由 Windows 内部机制使用。)

相反,设置低内存优先级也不会限制分配给进程的 RAM 量。因此,不要保留所有其他进程以这种方式使用 RAM。

那么,这会产生什么影响呢?当将进程设置为低内存优先级时,之后所有进入该进程的物理页面都会设置为该优先级。当进程工作集缩小时,设置为低于默认内存优先级的页面将首先从进程中删除。但是,低内存优先级页面的存在本身并不会导致工作集减少。

并且...当页面从进程中删除并转到待机页面列表时,较低优先级的页面可以在较高优先级的页面之前重新用于其他目的(例如用于 SuperFetch)。

就是这样。

事实上,内存优先级的主要目的根本不是优先考虑各种进程的 RAM 分配,而是确保 SuperFetch 不会重新利用太多包含待机页面列表中重要内容的页面。整个内存优先级方案出现在 Vista 中并非偶然 - Vista 是支持 SuperFetch 的第一个版本。SuperFetch 首先使用待机列表中内存优先级最低的页面。

对于普通的交互式进程,内存优先级设置为 5,对于由计划任务启动的进程,内存优先级默认为 3;对于“低优先级用户页面”,即由低优先级运行的进程分配的页面,内存优先级默认为 1。我还没有找到服务进程的默认值,但我猜想应该是 4 或 5。

一个真正想“优化”内存使用情况的进程可能会不时地改变自己的内存优先级,也许在执行不太重要的事情时将其设置为较低的值……或者在运行初始化代码时,这些代码在程序运行期间可能不再需要。然而,很少有进程会这么做。

相关内容