Изменилась ли семантика Newratio в JVM, несмотря на то, что Oracle Docs заявляют об обратном?JAVA

Программисты JAVA общаются здесь
Anonymous
Изменилась ли семантика Newratio в JVM, несмотря на то, что Oracle Docs заявляют об обратном?

Сообщение Anonymous »

Документы Oracle говорят (акцент на моем): < /p>

Например, настройка -xx: newratio = 3 означает, что отношение между молодым и старым поколением 1: 3. Другими словами, комбинированный размер пространств Eden и Survivor будет на одну четвертую от общего размера кучи.

То же самое было сказано: что означает значение -xx: Newratio и -xx: Oldsize JVM -флаги? Полем Однако при проверке на Java 17 с помощью java -xx: maxheapsize = 100m -xx:+printflagsfinal -version , я вижу, что maxnewsize (Young Gen) получает 2/3 Maxheapsize, делая его больше, чем старый Генерал, который противоположна тому, что говорят документы: < /p>

Код: Выделить всё

java -XX:MaxHeapSize=100M -XX:+PrintFlagsFinal -version | grep -E "MaxHeapSize|MaxNewSize|NewRatio"
size_t MaxHeapSize                              = 104857600                                 {product} {command line}
size_t MaxNewSize                               = 62914560                                  {product} {ergonomic}
uintx NewRatio                                 = 2                                         {product} {default}
size_t SoftMaxHeapSize                          = 104857600                              {manageable} {ergonomic}

openjdk version "17.0.2" 2022-01-18
OpenJDK Runtime Environment (build 17.0.2+8-86)
OpenJDK 64-Bit Server VM (build 17.0.2+8-86, mixed mode, sharing)
< /code>
Затем я запускаю одну и ту же команду с Java 8 и получаю значения, выровненные с документами и общеизвестными, которые я продолжаю видеть в Интернете: < /p>
java -Xmx100M -XX:+PrintFlagsFinal -version | grep -E "MaxHeapSize|MaxNewSize|NewRatio"
uintx MaxHeapSize                              := 109051904                           {product}
uintx MaxNewSize                               := 36175872                            {product}
uintx NewRatio                                  = 2                                   {product}
openjdk version "1.8.0_392"
OpenJDK Runtime Environment Corretto-8.392.08.1 (build 1.8.0_392-b08)
OpenJDK 64-Bit Server VM Corretto-8.392.08.1 (build 25.392-b08, mixed mode)
Итак, несмотря на maxheapsize = 100m и по умолчанию newratio = 2 в обоих случаях MaxNewsize - 62914560 в Java 17 и 36175872 в Java 8. < /p>
Мой вопрос: что происходит? Это ошибка или что -то изменилось, но не отражено в документах? Буду признателена любое руководство по правильному направлению
edit : выяснилось, что если я указать Newratio = 2 явно, то Java 17 печатает ожидаемый результат Подобно Java 8: < /p>

Код: Выделить всё

java -XX:MaxHeapSize=100M -XX:NewRatio=2 -XX:+PrintFlagsFinal -version | grep -E "MaxHeapSize|MaxNewSize|NewRatio"
size_t MaxHeapSize                              = 104857600                                 {product} {command line}
size_t MaxNewSize                               = 34603008                                  {product} {ergonomic}
uintx NewRatio                                 = 2                                         {product} {command line}
size_t SoftMaxHeapSize                          = 104857600                              {manageable} {ergonomic}
openjdk version "17.0.2" 2022-01-18
OpenJDK Runtime Environment (build 17.0.2+8-86)
OpenJDK 64-Bit Server VM (build 17.0.2+8-86, mixed mode, sharing)
Это ошибка или что -то в этом роде с эргономикой, которая влияет на значения?


Подробнее здесь: https://stackoverflow.com/questions/794 ... tating-oth

Вернуться в «JAVA»