2016-08-03 13 views
1

Я запускаю 64-разрядную JVM Java 1.8 Hotspot от Oracle. Я пытался обернуть голову разницей в поведении JVM, чтобы использовать сжатые указатели объектов при использовании разных механизмов ГК. Например:UseCompressedДополнительный порог ввода для G1 и CMS

$ java -XX:+UseConcMarkSweepGC -XX:+PrintFlagsFinal -Xms32766m -Xmx32766m 

bool UseCompressedClassPointers  := true  {lp64_product} 
bool UseCompressedOops     := true  {lp64_product} 

$ java -XX:+UseConcMarkSweepGC -XX:+PrintFlagsFinal -Xms32767m -Xmx32767m 

bool UseCompressedClassPointers  = false  {lp64_product} 
bool UseCompressedOops     = false  {lp64_product} 

$ java -XX:+UseG1GC -XX:+PrintFlagsFinal -Xms32736m -Xmx32736m 

bool UseCompressedClassPointers  := true  {lp64_product} 
bool UseCompressedOops     := true  {lp64_product} 

$ java -XX:+UseG1GC -XX:+PrintFlagsFinal -Xms32737m -Xmx32737m 

bool UseCompressedClassPointers  = false  {lp64_product} 
bool UseCompressedOops     = false  {lp64_product} 

Я попытался изменить несколько других G1GC ручки, но не могу получить сжатую оптимизации указателя на удар в для размеров кучи выше 32736 МБ для G1. Но, поскольку вы можете ясно видеть, что CMS может использовать сжатые указатели для размеров кучи до 32766 МБ. Я пытаюсь понять, что контролирует этот порог для разных алгоритмов GC.

+0

Является ли флаг G1 в последней команде '-XX: + G1GC' опечаткой? – IceMan

+0

@IceMan Да, это было, спасибо, что указали это. Я только что исправил это. –

ответ

0

, но не может получить его сжатая оптимизации указатель на удар в для размеров кучи выше 32736 MB

Это нормально, потому что объекты выравниваются 8byte границы по умолчанию, что означает наименьшие 3 бита являются избыточными и быть устраняемый сдвигом, который, в свою очередь, означает, что 32-битные указатели объектов могут в наибольшей степени адресовать объекты с 4 ГБ * 8 объектов с этим выравниванием.

Вам нужно поднять выравнивание объекта до 16 байтов через -XX:ObjectAlignmentInBytes=16, если вы хотите использовать более 32 ГБ со сжатыми oops. Обратите внимание, что это делает небольшие объекты более крупными, т. Е. Отнимает некоторую память, поэтому вам придется измерять, действительно ли она набирает вас.

This answer имеет некоторые дополнительные диагностические параметры, которые могут представлять интерес.

+0

Вот и все. Я не использую кучу более 32 ГБ. И 32766 МБ, и 32736 МБ составляют менее 32 ГБ. CMS использует сжатые указатели до 32766 МБ, но G1 использует только до 32736 МБ кучи. Я не могу понять, что объясняет разницу между этими порогами. (Отредактировал вопрос, чтобы четко отразить путаницу, которую у меня есть.) –

+0

Почему эта незначительная разница даже важна? Во всяком случае, ответ, который я связал, содержит диагностические флаги, они могут помочь с вашей «проблемой». – the8472

 Смежные вопросы

  • Нет связанных вопросов^_^