Каковы параметры -Xms и -Xmx при запуске JVM?


1009

Пожалуйста, объясните использование Xmsи Xmxпараметры в JVM. Каковы значения по умолчанию для них?


2
при использовании -Xmx128m -Xms64mон может достигать максимума вокруг 275mRES mem, но при использовании -Xmx128m -Xms128mон может достигать максимума вокруг 550mRES mem Использование Java 8 Лучше всего подчеркнуть GC и посмотреть, что происходит ...
— Кристоф Руссси,

Ответы:


1362

Флаг Xmxуказывает максимальный пул выделения памяти для виртуальной машины Java (JVM), а также Xmsуказывает начальный пул выделения памяти.

Это означает, что ваша JVM будет запущена с Xmsобъемом памяти и сможет использовать максимум Xmxобъема памяти. Например, запуск JVM, как показано ниже, запустит его с 256 МБ памяти и позволит процессу использовать до 2048 МБ памяти:

java -Xms256m -Xmx2048m

Флаг памяти также может быть указан в разных размерах, например, в килобайтах, мегабайтах и ​​т. Д.

-Xmx1024k
-Xmx512m
-Xmx8g

XmsФлаг не имеет значения по умолчанию, и Xmxобычно имеет значение по умолчанию 256 МБ. Обычно эти флаги используются, когда вы сталкиваетесь с java.lang.OutOfMemoryError.

При использовании этих настроек имейте в виду, что эти настройки предназначены для кучи JVM и что JVM может / будет использовать больше памяти, чем просто размер, выделенный для кучи. Из документации Oracle :

Обратите внимание, что JVM использует больше памяти, чем просто кучу. Например, методы Java, стеки потоков и собственные дескрипторы размещаются в памяти отдельно от кучи, а также внутренних структур данных JVM.


12
То есть, когда использование памяти превышает Xmx, мы получаем jvm из исключения памяти.
— Панкадж

59
Да, это правильно. Когда он пытается превысить это, хотя он может собирать мусор, пытаясь освободить достаточно памяти. Если памяти по-прежнему недостаточно для удовлетворения запроса, и куча уже достигла максимального размера, OutOfMemoryErrorпроизойдет an .
— Дэвид Конрад

2
Когда я использую инфраструктуру ForkJoin, мой компьютер дает сбой, потому что он занимает слишком много памяти. Возможно ли, что в OpenJDK нет жесткого ограничения памяти по умолчанию?
— Кристоф Де Тройер

6
Как разъяснено в разделе «java -Xmx 1G» означает 1 ГБ или 2 ^ 30 B? однозначный способ выразить, сколько памяти вы начинаете через -Xms256m«256 МБ», а не «256 МБ», так как он использует двоичные числа, а не десять. См. En.wikipedia.org/wiki/Binary_prefix . Кроме того, поскольку некоторое свободное пространство не используется для дополнительного пула пространства Survivor, объем фактически доступной памяти Runtime.getRuntime().maxMemory()меньше значения, указанного в параметре
— -Xmx

1
Полезное руководство по распространенным ошибкам, связанным с размером кучи: blog.paulgu.com/java/6-common-errors-in-setting-java-heap-size
— ctrlplusb

315

Запустите команду, java -Xи вы получите список всех -Xопций:

C:\Users\Admin>java -X
-Xmixed           mixed mode execution (default)
-Xint             interpreted mode execution only
-Xbootclasspath:<directories and zip/jar files separated by ;>
                      set search path for bootstrap classes and resources
-Xbootclasspath/a:<directories and zip/jar files separated by ;>
                      append to end of bootstrap class path
-Xbootclasspath/p:<directories and zip/jar files separated by ;>
                      prepend in front of bootstrap class path
-Xdiag            show additional diagnostic messages
-Xnoclassgc       disable class garbage collection
-Xincgc           enable incremental garbage collection
-Xloggc:<file>    log GC status to a file with time stamps
-Xbatch           disable background compilation
-Xms<size>        set initial Java heap size.........................
-Xmx<size>        set maximum Java heap size.........................
-Xss<size>        set java thread stack size
-Xprof            output cpu profiling data
-Xfuture          enable strictest checks, anticipating future default
-Xrs              reduce use of OS signals by Java/VM (see documentation)
-Xcheck:jni       perform additional checks for JNI functions
-Xshare:off       do not attempt to use shared class data
-Xshare:auto      use shared class data if possible (default)
-Xshare:on        require using shared class data, otherwise fail.
-XshowSettings    show all settings and continue
-XshowSettings:all         show all settings and continue
-XshowSettings:vm          show all vm related settings and continue
-XshowSettings:properties  show all property settings and continue
-XshowSettings:locale      show all locale related settings and continue

Опции -X нестандартны и могут быть изменены без предварительного уведомления.

Я надеюсь, что это поможет вам понять Xms, Xmxа также многое другое. :)


1
Сегодня узнал новую команду, спасибо @RupeshYadav
— jumping_monkey

18

Вы можете указать это в вашей IDE. Например, для Eclipse в Конфигурации запуска → Аргументы виртуальной машины . Вы можете войти -Xmx800m -Xms500mкак

Введите описание изображения здесь


В RubyMine на OSX это находится в меню Справка> Изменить пользовательские параметры виртуальной машины.
— Джон Шнайдер

8
Это не отвечает на вопрос. Вопрос в том, для чего они, а не в том, как их установить.
— Капитан Мэн

@ Hearen Как расстаться в интеллигии ??

13

Сам вопрос уже был рассмотрен выше. Просто добавив часть значений по умолчанию.

Согласно http://docs.oracle.com/cd/E13150_01/jrockit_jvm/jrockit/jrdocs/refman/optionX.html

Значение по умолчанию Xmx будет зависеть от платформы и объема памяти, доступного в системе.


8
Для других JVM (кроме JRockit) см. Этот пост, чтобы определить значения Xmx / Xms по умолчанию для вашей JVM: stackoverflow.com/questions/4667483/…
— Ogre Psalm33

4

Исходный размер кучи -Xms для запуска, однако во время рабочего процесса размер кучи может быть меньше -Xms из-за неактивности пользователей или итераций GC. Это не минимально необходимый размер кучи.

-Xmx максимальный размер кучи

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.