Quali sono i parametri -Xms e -Xmx all'avvio di JVM?


1008

Spiegare l'uso Xmse i Xmxparametri nelle JVM. Quali sono i valori predefiniti per loro?


2
quando lo si utilizza -Xmx128m -Xms64mpuò raggiungere il picco di 275mmem RES, ma quando lo si utilizza -Xmx128m -Xms128mpuò raggiungere il picco di 550mmem RES Utilizzo di Java 8 La cosa migliore è sottolineare il GC e vedere cosa succede ...
Christophe Roussy,

Risposte:


1360

Il flag Xmxspecifica il pool di allocazione di memoria massimo per una macchina virtuale Java (JVM), mentre Xmsspecifica il pool di allocazione di memoria iniziale.

Ciò significa che la tua JVM verrà avviata con una Xmsquantità di memoria e sarà in grado di utilizzare una Xmxquantità massima di memoria. Ad esempio, l'avvio di una JVM come di seguito la avvierà con 256 MB di memoria e consentirà al processo di utilizzare fino a 2048 MB di memoria:

java -Xms256m -Xmx2048m

Il flag di memoria può anche essere specificato in diverse dimensioni, come kilobyte, megabyte e così via.

-Xmx1024k
-Xmx512m
-Xmx8g

Il Xmsflag non ha un valore predefinito e in Xmxgenere ha un valore predefinito di 256 MB. Un uso comune di queste bandiere è quando si incontra a java.lang.OutOfMemoryError.

Quando si utilizzano queste impostazioni, tenere presente che queste impostazioni sono per l' heap della JVM e che la JVM può / utilizzerà più memoria rispetto alle dimensioni allocate all'heap. Dalla documentazione di Oracle :

Si noti che JVM utilizza più memoria rispetto al solo heap. Ad esempio metodi Java, stack di thread e handle nativi vengono allocati in memoria separatamente dall'heap, nonché dalle strutture di dati interne JVM.


12
Quindi è come quando l'utilizzo della memoria supera Xmx ottenendo jvm di memoria esaurita.
Pankaj,

59
Sì, è corretto. Quando tenta di superare questo, sebbene possa raccogliere immondizia per provare a liberare memoria sufficiente. Se la memoria non è ancora sufficiente per soddisfare la richiesta e l'heap ha già raggiunto la dimensione massima, OutOfMemoryErrorsi verificherà un errore.
David Conrad,

2
Quando utilizzo il framework ForkJoin il mio computer si arresta in modo anomalo perché occupa troppa memoria. È possibile che su OpenJDK non ci siano limiti fissi sulla memoria per impostazione predefinita?
Christophe De Troyer,

6
Come chiarito in java -Xmx 1G significa 1 GB o 2 ^ 30 B? , il modo inequivocabile per esprimere la quantità di memoria che si avvia con via -Xms256mè "256 MiB", non "256 MB", poiché passa da potenze binarie piuttosto che da potenze di dieci. Vedi en.wikipedia.org/wiki/Binary_prefix . Inoltre, poiché è disponibile uno spazio inutilizzabile per un pool aggiuntivo di spazio Survivor, la quantità di memoria effettivamente disponibile secondo Runtime.getRuntime().maxMemory()è inferiore al valore specificato tramite -Xmx
nealmcb

1
Una guida utile di errori comuni relativi alle dimensioni dell'heap: blog.paulgu.com/java/6-common-errors-in-setting-java-heap-size
ctrlplusb

315

Esegui il comando java -Xe otterrai un elenco di tutte le -Xopzioni:

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

Le opzioni -X non sono standard e sono soggette a modifiche senza preavviso.

Spero che questo ti aiuti a capire Xms, Xmxcosì come molte altre cose che contano di più. :)


1
Ho imparato un nuovo comando oggi, grazie @RupeshYadav
jumping_monkey il

18

Puoi specificarlo nel tuo IDE. Ad esempio, per Eclipse in Esegui configurazioniArgomenti VM . Puoi inserire -Xmx800m -Xms500mcome

Inserisci qui la descrizione dell'immagine


In RubyMine su OSX, si trova nel menu?> Modifica opzioni VM personalizzate.
Jon Schneider,

8
Questo non risponde alla domanda. La domanda è: a cosa servono, non come impostarli.
Captain Man,

@Hearen Come sistemarsi in intellij ??


3

-Xms dimensione iniziale dell'heap per l'avvio, tuttavia, durante il processo di lavoro, la dimensione dell'heap può essere inferiore a -Xms causa dell'inattività degli utenti o delle iterazioni GC. Questa non è una dimensione heap minima richiesta.

-Xmx dimensione massima dell'heap

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.