Скажите Java не помещать объект в пространство подкачки

StackOverflow https://stackoverflow.com/questions/605592

Вопрос

Можно ли сказать JVM намекнуть ОС, что определенный объект желательно не выталкивать в пространство подкачки?

Это было полезно?

Решение

Короткий ответ - нет.

Java не позволяет вам контролировать то, что заменяется и что «закреплено» в оперативной памяти.

Беспокойство по поводу подобных вещей обычно является признаком того, что в вашем проекте что-то не так.ОС в целом гораздо лучше определит, что следует заменять, а что нет.Ваша задача — написать программное обеспечение так, чтобы оно не пыталось угадать, что будет делать базовая виртуальная машина/ОС, а просто сосредоточилось на предоставлении ваших функций и хорошем дизайне.

Другие советы

Эта проблема также была очень заметна в Eclipse и плагине грязного взлома KeepResident (http://suif.stanford.edu/pub/keepresident/) избегает этого.

Может быть, это хорошее место для начала?Я не видел, чтобы он широко использовался, так что, возможно, он интегрирован в стандартный дистрибутив Eclipse?

Привет!Вы программируете на управляемом языке.Почему ты думаешь об этом?Если вы не можете выбросить эти вещи из головы, вы всегда можете программировать на C.

Короткий ответ (как указано выше):Не делайте этого :-).

Однако в принципе это было бы возможно.Большинство ОС позволяют «заблокировать» определенные области памяти от подкачки (например, млок(2) под Linux, VirtualLock под Windows).

Виртуальная машина может предоставить эту функциональность приложениям Java через подходящий API.Однако ни одна известная мне виртуальная машина не делает этого, поэтому для этого вам сначала придется изменить свою виртуальную машину...

Если вы обращаетесь к нему регулярно, любая страница, на которой он находится в данный момент (JVM перемещает данные во время сборки мусора), не будет выгружена, если только что-то другое не запрашивает память еще более агрессивно.Но невозможно сказать JVM не перемещать ее на другую страницу, а ОС знает только о страницах.

Не ответ, но из-за отсутствия комментариев я оставляю за собой этот вариант :)

Есть причины не хранить информацию в свопе.Будь то пароли или другая конфиденциальная информация, которая не должна провести вечность на диске.Кроме того, возвращаясь после выходных к своему компьютеру, мне хотелось бы, чтобы некоторые вещи были в памяти сразу же доступны.

(Не Java) Вероятно, существует какой-то способ сделать это для каждой/большинства операционных систем.С Windows это определенно возможно.Но не прямо из Java (например, JNI).В зависимости от того, насколько отчаянным является этот вариант, вы всегда можете рассмотреть возможность использования видеопамяти или другого аппаратного устройства, которое не заменяется.Это позволяет вам по-прежнему использовать стандартный Java API, например jogl, для хранения информации.Но почему-то я сомневаюсь, что это связано с реализацией/результатами, которые вы ищете.

По сути, вы хотите постоянно хранить всю JVM в основной памяти.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top