Что делает флаг JVM HotSpot -XX:+UseCompressedOops
и когда его использовать? Какие различия в производительности и использовании памяти я увижу при использовании его на 64-битном экземпляре Java (а не при его неиспользовании)?
Что делает флаг JVM HotSpot -XX:+UseCompressedOops
и когда его использовать? Какие различия в производительности и использовании памяти я увижу при использовании его на 64-битном экземпляре Java (а не при его неиспользовании)?
Ответы:
В большинстве JVM HotSpot за последний год он был включен по умолчанию. Этот параметр позволяет ссылкам быть 32-разрядными в 64-разрядной JVM и иметь доступ к куче размером около 32 ГБ. (может быть больше 32-битных указателей) (у вас также может быть почти неограниченная память вне кучи). Это может сэкономить значительный объем памяти и потенциально повысить производительность.
Если вы хотите использовать эту опцию, я предлагаю вам обновить ее до версии, в которой она включена по умолчанию, так как могла быть веская причина, например, ошибки, почему она не была включена ранее. Попробуйте Java 6 с обновлением 23 или Java 7 с обновлением 5.
Короче говоря, не включайте его, используйте версию, в которой он включен по умолчанию.
Обновить:
В Java 8 у вас есть возможность установить -XX:ObjectAlignmentInBytes=
и на самом деле, если размер кучи равен 64 ГБ, он будет -XX:ObjectAlignmentInBytes=16
использовать 32-разрядные ссылки.
JE cache
Это потому, что по какой-то причине не может работать, используете ли вы компрессы. Я могу придумать несколько методов, которые помогут вам в этом. Вам не нужно указывать его в командной строке IMHO, если вы не хотите, чтобы JVM не работал, если он не включен. например, у вас есть куча 64 ГБ на Java 8.