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

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

Комментарии к вопросу (1)
Решение

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

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

java -Xms256m -Xmx2048m

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

-Xmx1024k
-Xmx512m
-Xmx8g

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

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

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

Комментарии (9)

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

C:\Users\Admin>java -X
-Xmixed           mixed mode execution (default)
-Xint             interpreted mode execution only
-Xbootclasspath:
                      set search path for bootstrap classes and resources
-Xbootclasspath/a:
                      append to end of bootstrap class path
-Xbootclasspath/p:
                      prepend in front of bootstrap class path
-Xdiag            show additional diagnostic messages
-Xnoclassgc       disable class garbage collection
-Xincgc           enable incremental garbage collection
-Xloggc:    log GC status to a file with time stamps
-Xbatch           disable background compilation
-Xms        set initial Java heap size.........................
-Xmx        set maximum Java heap size.........................
-Xss        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, а также многие другие важные вещи :)

Комментарии (0)

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

Комментарии (3)

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

В соответствии с http://docs.oracle.com/cd/E13150_01/jrockit_jvm/jrockit/jrdocs/refman/optionX.html

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

Комментарии (1)

Памяти JVM состоит из следующих сегментов:

  1. Памяти, которая является хранилищем для объектов Java
  2. Память не "кучи", которая используется в Java для хранения загруженных классов и других мета-данных
  3. Сам код для JVM, JVM внутренние структуры, загруженного кода агента профайлер и данных, и т. д.

В JVM есть куча, которая является областью во время выполнения данные, из которых память для всех экземпляров классов и массивов выделяются. Она создается внутри JVM пуска.

Размер кучи может быть настроен со следующими параметрами виртуальной машины:

-Xmx - to set the maximum Java heap size
-Xms - to set the initial Java heap size

По умолчанию, максимальный размер кучи равен 64 МБ.

Памяти "кучи" для объектов исправляется автоматической системой управления памятью, которая известна как сборщик мусора. Кучи может иметь фиксированный размер или может быть расширена и уменьшена, в зависимости от сборщика мусора'стратегия.

Следующую команду запустить JVM с 256 Мб памяти, и позволяет Java-процесса использовать до 4G (4096МБ) памяти.

java -Xms256m -Xmx4g
Комментарии (0)