Скажите Java не помещать объект в пространство подкачки - PullRequest
3 голосов
/ 03 марта 2009

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

Ответы [ 7 ]

11 голосов
/ 03 марта 2009

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

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

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

3 голосов
/ 03 марта 2009

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

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

1 голос
/ 03 марта 2009

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

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

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

1 голос
/ 03 марта 2009

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

1 голос
/ 03 марта 2009

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

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

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

1 голос
/ 03 марта 2009

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

0 голосов
/ 10 марта 2009

Обычно вы хотите, чтобы вся JVM постоянно находилась в основной памяти.

...