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