Які параметри -Xms та -Xmx при запуску JVM?


1006

Будь ласка, поясніть використання Xmsта Xmxпараметри у спільних машинах. Які для них значення за замовчуванням?


2
при використанні -Xmx128m -Xms64mвін може досягти максимальної кількості 275mпам’яті з ВДЕ, але при використанні -Xmx128m -Xms128mможе 550mдосягти максимуму навколо пам’яті з ВДЕ Використання Java 8 Найкраще - наголосити на ГК і подивитися, що відбувається ...
Крістоф Руссі

Відповіді:


1358

Прапор Xmx вказує максимальний пул розподілу пам'яті для віртуальної машини Java (JVM), в той час як Xmsвказує початковий пул розподілу пам'яті.

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

java -Xms256m -Xmx2048m

Прапор пам'яті також можна вказати в різних розмірах, таких як кілобайти, мегабайти тощо.

-Xmx1024k
-Xmx512m
-Xmx8g

The XmsПрапор не має значення по замовчуванню, і Xmxзазвичай має значення за замовчуванням 256 МБ. Загальне використання цих прапорів - це коли ви стикаєтесь з a java.lang.OutOfMemoryError.

Використовуючи ці налаштування, майте на увазі, що ці налаштування призначені для купи JVM і що JVM може / буде використовувати більше пам'яті, ніж просто розмір, призначений для купи. З документації Oracle :

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


12
Так це, коли використання пам'яті перевищує Xmx, ми виключаємо jvm з винятку пам'яті.
Панкай

59
Так, це правильно. Коли він намагається перевищити це, хоча він може збирати сміття, щоб спробувати звільнити достатню кількість пам'яті. Якщо ще не вистачає пам'яті для задоволення запиту, і купа вже досягла максимального розміру, OutOfMemoryErrorвідбудеться повідомлення.
Девід Конрад

2
Коли я використовую рамку ForkJoin, мій комп'ютер виходить з ладу, оскільки він займає занадто багато пам'яті. Чи можливо, що в OpenJDK немає жорсткого обмеження пам’яті за замовчуванням?
Крістоф Де Троєр

6
Як було уточнено, чи означає java -Xmx 1G 1 ГБ або 2 ^ 30 Б? , однозначний спосіб виразити, скільки пам'яті ви починаєте з допомогою -Xms256m"256 Мбіт", а не "256 МБ", оскільки це стосується бінарних повноважень, а не потужностей десяти. Див. En.wikipedia.org/wiki/Binary_prefix . Крім того, оскільки для додаткового пулу Survivor простору відведено деякий непридатний простір, об'єм пам'яті, фактично наявний відповідно до Runtime.getRuntime().maxMemory(), менший за значення, вказане через -Xmx
nealmcb

1
Корисний посібник із поширеними помилками, що стосуються розміру купи: blog.paulgu.com/java/6-common-errors-in-setting-java-heap-size
ctrlplusb

313

Запустіть команду, 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 у конфігураціях запускуаргументи VM . Ви можете ввести -Xmx800m -Xms500mяк

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


У RubyMine на OSX це в меню довідки> Редагувати власні параметри VM.
Джон Шнайдер

8
Це не відповідає на запитання. Питання в тому, для чого вони, а не як їх встановити.
Людина капітана

@Hearen Як підключитись до Intellij ??

13

Саме питання вже було розглянуто вище. Просто додавання частини значень за замовчуванням.

Відповідно до http://docs.oracle.com/cd/E13150_01/jrockit_jvm/jrockit/jrdocs/refman/optionX.html

Значення Xmx за замовчуванням залежатиме від платформи та кількості пам'яті, наявної в системі.


8
Для інших віртуальних машин (крім JRockit), побачити цей пост , щоб визначити значення по замовчуванням XMX / XMS з ваших віртуальної машини Java: stackoverflow.com/questions/4667483 / ...
Ogre Psalm33

3

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

-Xmx максимальний розмір купи

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.