Что означают флаги -XX:NewRatio и -XX:OldSize JVM?

Я запускаю свое Java-приложение со следующей командной строки:

java -XX:+PrintCommandLineFlags -verbose:gc -XX:+PrintGCDetails \
     -XX:+UseConcMarkSweepGC -jar start.jar

JVM включает следующие параметры:

-XX:MaxNewSize=87244800 -XX:MaxTenuringThreshold=4 -XX:NewRatio=7
-XX:NewSize=21811200 -XX:OldPLABSize=16 -XX:OldSize=65433600
-XX:+PrintCommandLineFlags -XX:+PrintGC -XX:+PrintGCDetails
-XX:+UseCompressedOops -XX:+UseConcMarkSweepGC -XX:+UseParNewGC

Может ли кто-нибудь объяснить мне значение NewRatio и OldSize? В частности, OldSize — это начальный размер постоянного поколения?


person dacanalr    schedule 28.07.2011    source источник


Ответы (2)


NewRatio — это отношение старого поколения к молодому (например, значение 2 означает, что максимальный размер старого будет в два раза больше максимального размера молодого, т. е. молодой может получить до 1/3 кучи).

OldSize не является одним из задокументированных параметров, но я предполагаю, что это размер постоянного пространства http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html.

person Peter Lawrey    schedule 28.07.2011
comment
В документе указано соотношение размеров нового и старого поколения. Значение по умолчанию — 2. То есть 2 означает, что размер нового поколения в два раза больше, чем у старого поколения? - person DeepNightTwo; 26.07.2013
comment
@DeepNightTwo Хороший вопрос. Я не уверена. надо бы запустить и проверить. Я думал, что все наоборот. - person Peter Lawrey; 26.07.2013
comment
Я проверил с помощью подключаемого модуля VisualGC для JVisualVM, что более высокое значение -XX:NewRatio приводит к большему размеру старого поколения, поэтому отношение должно иметь значение old в числителе, а не в знаменателе. (Протестировано с Sun HotSpot JVM версии 1.6.0_45.) - person Jim Pivarski; 25.09.2013
comment
На этой неделе я также проверил с ребятами из Oracle, что с коэффициентом невозможно сделать новый размер больше, чем старый. - person Peter Lawrey; 25.09.2013
comment
@PeterLawrey Можете ли вы обновить текст своего ответа, указав соотношение старшего поколения и молодого поколения, чтобы он соответствовал вашему вводному примеру? Прямо сейчас в вашем тексте написано «молодой/старый», но в вашем примере написано «старый/молодой». - person Tim; 23.10.2014
comment
Однако, согласно этому документу, . .., установка -XX:NewRatio=3 означает, что соотношение между старым и молодым поколением составляет 1:3 - person wings; 08.01.2019
comment
@wings Это сбивает с толку, как говорится ... общий размер Эдема и пространства для выживших будет четвертым в куче. то есть отношение старого к новому составляет 3: 1, что делает молодое пространство 1/4 кучи. Кроме того, значение NewRatio по умолчанию для серверной JVM равно 2: старое поколение занимает 2/3 кучи, а новое поколение — 1/3. - person Peter Lawrey; 08.01.2019

Поскольку NewRatio уже хорошо объяснен, следующее должно помочь с OldSize.

Здесь OldSize => размер постоянного поколения по умолчанию. Это размер штатного расписания по умолчанию до тех пор, пока в игру не вступает эргономика.

person Khanna111    schedule 09.04.2014
comment
значит ли это, что размер будет расти оттуда? есть ли у вас какие-либо ссылки, связанные с OldSize, на которые я могу сослаться? Спасибо - person Kin Cheung; 03.03.2017
comment
Не помните, только растет он или тоже уменьшается. Это было очень давно. Извиняюсь. - person Khanna111; 03.03.2017