1

Я предполагаю, что ответ зависит от ОС. В данном случае это VMware ESXi. Я создал состояние нехватки памяти, перенеся несколько виртуальных машин на хост с чрезмерным выделением памяти. После того, как начнутся совместное использование страниц и всплывающие подсказки, будет много оперативной памяти без постраничной подкачки, однако эти процессы занимают время. В течение этого времени ESXi меняет память на диск.

Итак, у меня осталось условие, что у меня достаточно свободного места на хосте, но все же значительное количество было перенесено на диск.

Когда эта память будет возвращена в ОЗУ? Только один раз к нему обращаются? И это также означает, что при доступе будет задержка? Это можно избежать?

1 ответ1

2

Только когда к нему обращаются. Все современные операционные системы с виртуальной памятью "разбиты на страницы по требованию", что означает, что вещи разбиты на страницы в результате сбоев страниц, которые происходят при обращении к "недействительным" страницам.

("Недопустимая" страница - это просто страница, которая вызывает ссылку на страницу при обращении к ней. Это может быть на самом деле в оперативной памяти, в кэше страницы. Имя взято из "допустимого" бита в записи таблицы страниц x86/x64. Другое название для этого - "резидент", но это имя немного вводит в заблуждение, поскольку опять же "недопустимая" страница может фактически быть в ОЗУ, в кеше страницы.)

Это несколько модифицируется с помощью предварительной выборки, чтения и т.д., Но, по сути, все еще выполняется по требованию.

Причина этого заключается в том, что, когда программа некоторое время простаивает (и "переключается на диск"), ее шаблон доступа к памяти при следующем выполнении чего-либо не обязательно будет аналогичен тому, что было ранее. Так что было бы несколько проще просто листать то, что было в памяти раньше.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .