Это восходит к JDK 5, который представил эргономику JVM. До этого JVM устанавливала очень малые значения по умолчанию для пространства кучи. В JDK 1.1 было установлено значение по умолчанию 16 МБ для Xms и Xmx, JDK 1.2 изменило его на Xms 1 МБ и Xmx 64 МБ по умолчанию. В JDK 1.3 значение Xms по умолчанию увеличилось до 2 МБ.
Поскольку Java становилось все более популярным на серверах, а объемы памяти значительно увеличивались, Sun представила концепцию машины серверного класса . JDK 5. Это тот, который имеет 2 или более физических процессора и 2 или более ГБ памяти (если я правильно помню, в JDK 5 машине также приходилось не работать Windows, чтобы считать как сервер).
На машинах серверного класса по умолчанию были установлены следующие параметры
- Пропускная способность сборщика мусора (то есть параллельного сборщика)
- начальный размер кучи от 1/64 физической памяти до 1 Гбайт
- максимальный размер кучи от 1/4 физической памяти до 1 Гбайт
- Компилятор времени выполнения сервера
Эргономика обеспечена двумя флаги командной строки, которые позволяли пользователю устанавливать цель производительности для JVM; идея состоит в том, что JVM затем выяснит, как достичь этой цели, изменив ее параметры. Конечная цель состояла в том, чтобы устранить множество флагов -XX, которые использовались для ручной настройки производительности JVM.
Параметры:
-XX: MaxGCPauseMillis = nnn, который устанавливает максимальную паузу время, которое вы хотите для G C в миллисекундах.
-XX: GCTimeRatio =, которое устанавливает отношение времени сбора мусора к времени приложения, равное 1 / (1 + nnn). Это упоминалось как цель пропускной способности.
Вы можете указать одну из этих целей или обе. Если JVM удается достичь обеих этих целей, она пытается уменьшить объем используемой памяти (цель зоны охвата).
Здесь есть более подробная информация:
https://www.oracle.com/technetwork/java/ergo5-140223.html