Які параметри -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.