Начиная с Java 10, этот параметр (который включен по умолчанию) используется для того, чтобы JVM учитывала ограничения памяти контейнера при выделении размера кучи, а не конфигурации хост-машины.
Этот параметр был добавлен в Java 8: https://www.oracle.com/technetwork/java/javase/8u191-relnotes-5032181.html
Примеры:
Если вы запустите:
docker run -m 1gb openjdk:8u131 java -XshowSettings:vm -version
Результат будет (включенмоя машина Ubuntu с 8 ГБ)
Max. Heap Size (Estimated): 1.68G
Я установил лимит памяти для контейнера, но он проигнорировал и использовал конфигурацию хоста (по умолчанию используется 1/4 от общей памяти)
Теперь, если я запустил версию с новой функцией (ссылка выше), вы увидите, что ограничение памяти контейнера было учтено:
docker run -m 1g openjdk:8u191-jre-alpine java -XshowSettings:vm -version
Результат:
VM settings:
Max. Heap Size (Estimated): 247.50M
Ergonomics Machine Class: server
Using VM: OpenJDK 64-Bit Server VM
openjdk version "1.8.0_191"
НаКогда я пишу это, версия openjdk: 8 - это 222. Поэтому вы можете использовать эту версию.
Для получения дополнительной информации:
Объясняет использование этого флага в Java 10: https://medium.com/adorsys/jvm-memory-settings-in-a-container-environment-64b0840e1d9e
Использование этого флага с Java 8: https://blog.softwaremill.com/docker-support-in-new-java-8-finally-fd595df0ca54