Могу ли я установить приоритет использования памяти в Windows8? Я хотел бы дать определенным программам, в частности JavaW, приоритетный доступ к доступной оперативной памяти.
2 ответа
Windows имеет page priority
с Vista. Вы можете использовать ProcessHacker, чтобы установить его. Значение 1
является самым низким, а 5
самым высоким (значение по умолчанию):
Извините, но нет способа делать то, что вы хотите.
Вы можете установить "приоритет памяти" процесса, но это будет иметь очень ограниченный эффект. Нет настройки, которая предоставит процессу больший доступ к доступной оперативной памяти, чем по умолчанию, поскольку приоритет памяти по умолчанию (5) - это максимум, который можно установить. (Существуют значения 6 и 7, но они могут использоваться только внутренними механизмами Windows.)
И наоборот, установка низкого приоритета памяти также не ограничивает объем оперативной памяти, выделяемой процессу. Поэтому забудьте о том, чтобы не допустить использования ОЗУ другими процессами.
Как это влияет? Если для процесса задан низкий приоритет памяти, то все физические страницы, сброшенные в процесс, после этого получают этот приоритет. И страницы, для которых установлен более низкий приоритет памяти по умолчанию, будут первыми, которые будут удалены из процесса, когда рабочий набор процесса сокращается. Однако само существование страниц с низким приоритетом памяти не приводит к сокращению рабочего набора.
И ... когда страницы удаляются из процесса и переходят в список резервных страниц, страницы с более низким приоритетом могут быть переназначены (например, для SuperFetch) перед страницами с более высоким приоритетом.
Вот и все.
Фактически, главная цель приоритета памяти вовсе не в том, чтобы расставить приоритеты в распределении оперативной памяти различным процессам, а в том, чтобы SuperFetch не переназначал слишком много страниц, содержащих важные вещи, из списка страниц Standby. Не случайно, что вся эта схема приоритетов памяти появилась в Vista - первой версии, которая поддерживала SuperFetch. SuperFetch сначала использует страницы с самым низким приоритетом памяти в списке ожидания.
Приоритет памяти установлен на 5 для обычных интерактивных процессов, 3 - по умолчанию для процессов, запускаемых запланированными задачами; 1 для "пользовательских страниц с низким приоритетом", то есть страниц, выделенных процессами с низкими приоритетами. Мне не удалось найти значение по умолчанию для сервисных процессов, но я думаю, что это 4 или 5.
Процесс, который действительно хотел бы попытаться "оптимизировать" использование своей памяти, мог время от времени менять собственный приоритет памяти, возможно, устанавливая его на более низкое значение во время не столь важных вещей… Или во время выполнения кода инициализации, который, вероятно, больше не понадобится во время выполнения программы. Тем не менее, мало процессов беспокоить.