1. Обзор
В этом руководстве мы обсудим несколько параметров JVM, которые мы можем использовать для установки процента оперативной памяти JVM.
Представленные в Java 8 параметры InitialRAMPercentage
, MinRAMPercentage
и MaxRAMPercentage
помогают настроить размер кучи приложения Java.
2. -XX: Начальный RAMPercentage
Параметр InitialRAMPercentage
JVM позволяет нам настроить начальный размер кучи приложения Java. Это процент от общей памяти физического сервера или контейнера , передаваемый как двойное значение.
Например, если мы установим XX:InitialRAMPercentage=50.0
для физического сервера с полной памятью 1 ГБ, то начальный размер кучи будет около 500 МБ (50% от 1 ГБ).
Для начала давайте проверим значение IntialRAMPercentage
по умолчанию в JVM:
$ docker run openjdk:8 java -XX:+PrintFlagsFinal -version | grep -E "InitialRAMPercentage"
double InitialRAMPercentage = 1.562500 {product}
openjdk version "1.8.0_292"
OpenJDK Runtime Environment (build 1.8.0_292-b10)
Затем давайте установим начальный размер кучи 50% для JVM:
$ docker run -m 1GB openjdk:8 java -XX:InitialRAMPercentage=50.0 -XX:+PrintFlagsFinal -version | grep -E "InitialRAMPercentage"
double InitialRAMPercentage := 50.000000 {product}
openjdk version "1.8.0_292"
OpenJDK Runtime Environment (build 1.8.0_292-b10)
Важно отметить, что JVM игнорирует InitialRAMPercentage
при настройке параметра -Xms
.
3. -XX:MinRAMPercentage
Параметр MinRAMPercentage
, в отличие от его названия, позволяет установить максимальный размер кучи для JVM, работающей с небольшим объемом памяти (менее 200 МБ).
Во-первых, мы рассмотрим значение MinRAMPercentage
по умолчанию :
$ docker run openjdk:8 java -XX:+PrintFlagsFinal -version | grep -E "MinRAMPercentage"
double MinRAMPercentage = 50.000000 {product}
openjdk version "1.8.0_292"
OpenJDK Runtime Environment (build 1.8.0_292-b10)
Затем давайте используем параметр, чтобы установить максимальный размер кучи для JVM с общей памятью 100 МБ:
$ docker run -m 100MB openjdk:8 java -XX:MinRAMPercentage=80.0 -XshowSettings:VM -version
VM settings:
Max. Heap Size (Estimated): 77.38M
Ergonomics Machine Class: server
Using VM: OpenJDK 64-Bit Server VM
openjdk version "1.8.0_292"
OpenJDK Runtime Environment (build 1.8.0_292-b10)
Кроме того, JVM игнорирует параметр MaxRAMPercentage
при установке максимального размера кучи для небольшого сервера/контейнера памяти:
$ docker run -m 100MB openjdk:8 java -XX:MinRAMPercentage=80.0 -XX:MaxRAMPercentage=50.0 -XshowSettings:vm -version
VM settings:
Max. Heap Size (Estimated): 77.38M
Ergonomics Machine Class: server
Using VM: OpenJDK 64-Bit Server VM
openjdk version "1.8.0_292"
OpenJDK Runtime Environment (build 1.8.0_292-b10)
4. -XX:MaxRAMPercentage
Параметр MaxRAMPercentage
позволяет установить максимальный размер кучи для JVM, работающей с большим объемом памяти (более 200 МБ).
Во-первых, давайте рассмотрим значение MaxRAMPercentage
по умолчанию :
$ docker run openjdk:8 java -XX:+PrintFlagsFinal -version | grep -E "MaxRAMPercentage"
double MaxRAMPercentage = 25.000000 {product}
openjdk version "1.8.0_292"
OpenJDK Runtime Environment (build 1.8.0_292-b10)
Затем мы можем использовать параметр, чтобы установить максимальный размер кучи на 60% для JVM с общей памятью 500 МБ:
$ docker run -m 500MB openjdk:8 java -XX:MaxRAMPercentage=60.0 -XshowSettings:vm -version
VM settings:
Max. Heap Size (Estimated): 290.00M
Ergonomics Machine Class: server
Using VM: OpenJDK 64-Bit Server VM
openjdk version "1.8.0_292"
OpenJDK Runtime Environment (build 1.8.0_292-b10)
Точно так же JVM игнорирует параметр MinRAMPercentage
для большого сервера/контейнера памяти:
$ docker run -m 500MB openjdk:8 java -XX:MaxRAMPercentage=60.0 -XX:MinRAMPercentage=30.0 -XshowSettings:vm -version
VM settings:
Max. Heap Size (Estimated): 290.00M
Ergonomics Machine Class: server
Using VM: OpenJDK 64-Bit Server VM
openjdk version "1.8.0_292"
OpenJDK Runtime Environment (build 1.8.0_292-b10)
5. Вывод
В этой короткой статье мы обсудили использование параметров JVM InitialRAMPercentage
, MinRAMPercentage
и MaxRAMPercentage
для установки процентов оперативной памяти, которые JVM будет использовать для кучи.
Во-первых, мы проверили значения по умолчанию для флагов, установленных на JVM. Затем мы использовали параметры JVM для установки начального и максимального размеров кучи.