Я запускаю 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.
Является ли флаг G1 в последней команде '-XX: + G1GC' опечаткой? – IceMan
@IceMan Да, это было, спасибо, что указали это. Я только что исправил это. –