Объясните, пожалуйста, использование параметров Xms
и Xmx
в JVM. Каковы их значения по умолчанию?
Флаг 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.
Выполните команду 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
, а также многие другие важные вещи :)
Вы можете указать это в вашей IDE. Например, для Eclipse в запуск конфигурации → аргументы ВМ. Вы можете ввести -Xmx800m -Xms500m
как
Сам вопрос уже был рассмотрен выше. Просто добавляю часть значений по умолчанию.
В соответствии с http://docs.oracle.com/cd/E13150_01/jrockit_jvm/jrockit/jrdocs/refman/optionX.html
Значение Xmx по умолчанию зависит от платформы и объема памяти, доступной в системе.
Памяти JVM состоит из следующих сегментов:
В JVM есть куча, которая является областью во время выполнения данные, из которых память для всех экземпляров классов и массивов выделяются. Она создается внутри JVM пуска.
Размер кучи может быть настроен со следующими параметрами виртуальной машины:
-Xmx<size> - to set the maximum Java heap size
-Xms<size> - to set the initial Java heap size
По умолчанию, максимальный размер кучи равен 64 МБ.
Памяти "кучи" для объектов исправляется автоматической системой управления памятью, которая известна как сборщик мусора. Кучи может иметь фиксированный размер или может быть расширена и уменьшена, в зависимости от сборщика мусора'стратегия.
Следующую команду запустить JVM с 256 Мб памяти, и позволяет Java-процесса использовать до 4G (4096МБ) памяти.
java -Xms256m -Xmx4g