Förklara användningen av parametrarna Xms
och Xmx
i JVM:er. Vilka är standardvärdena för dem?
Flaggan Xmx
anger den maximala minnesallokeringspoolen för en virtuell Java-maskin (JVM), medan Xms
anger den ursprungliga minnesallokeringspoolen.
Detta innebär att din JVM kommer att startas med Xms
mängd minne och kommer att kunna använda maximalt Xmx
mängd minne. Om du till exempel startar en JVM på följande sätt kommer den att starta med 256 MB minne och processen kommer att kunna använda upp till 2048 MB minne:
java -Xms256m -Xmx2048m
Minnesflaggan kan också anges i olika storlekar, till exempel kilobyte, megabyte och så vidare.
-Xmx1024k
-Xmx512m
-Xmx8g
Flaggan Xms
har inget standardvärde och Xmx
har vanligtvis ett standardvärde på 256 MB. Ett vanligt användningsområde för dessa flaggor är när du stöter på ett java.lang.OutOfMemoryError
.
När du använder dessa inställningar ska du komma ihåg att dessa inställningar gäller för JVM:s heap och att JVM kan/kommer att använda mer minne än bara den storlek som allokerats till heap. Från Oracle's dokumentation:
Observera att JVM använder mer minne än bara heap. Till exempel allokeras Javametoder, trådstaplar och infödda handtag i ett minne som är skilt från heap, liksom JVM:s interna datastrukturer.
Kör kommandot java -X
och du får en lista över alla -X
alternativ:
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
Oalternativen -X är icke-standardiserade och kan ändras utan föregående meddelande.
Jag hoppas att detta hjälper dig att förstå Xms
, Xmx
och många andra saker som är viktigast. :)
Själva frågan har redan behandlats ovan. Jag lägger bara till en del av standardvärdena.
Enligt http://docs.oracle.com/cd/E13150_01/jrockit_jvm/jrockit/jrdocs/refman/optionX.html
Standardvärdet för Xmx beror på plattformen och mängden tillgängligt minne i systemet.