Proszę wyjaśnić użycie parametrów Xms
i Xmx
w JVM. Jakie są dla nich wartości domyślne?
Flaga Xmx
określa maksymalną pulę alokacji pamięci dla maszyny wirtualnej Java (JVM), podczas gdy Xms
określa początkową pulę alokacji pamięci.
Oznacza to, że twoja JVM zostanie uruchomiona z Xms
ilością pamięci i będzie mogła użyć maksymalnie Xmx
ilości pamięci. Na przykład, uruchomienie JVM jak poniżej spowoduje uruchomienie jej z 256 MB pamięci i pozwoli procesowi na użycie do 2048 MB pamięci:
java -Xms256m -Xmx2048m
Flaga pamięci może być również określona w różnych rozmiarach, takich jak kilobajty, megabajty itd.
-Xmx1024k
-Xmx512m
-Xmx8g
Flaga Xms
nie ma wartości domyślnej, a Xmx
zazwyczaj ma wartość domyślną 256 MB. Powszechnym zastosowaniem tych flag jest sytuacja, gdy napotkasz błąd java.lang.OutOfMemoryError
.
Podczas korzystania z tych ustawień należy pamiętać, że ustawienia te są dla JVM's heap, i że JVM może / będzie używać więcej pamięci niż tylko rozmiar przydzielony do sterty. Z dokumentacji Oracle'a:
Zauważ, że JVM używa więcej pamięci niż tylko sterty. Na przykład metody Java, stosy wątków i natywne uchwyty są przydzielane w pamięci oddzielnej od sterty, podobnie jak wewnętrzne struktury danych JVM.
Uruchom komendę java -X
a otrzymasz listę wszystkich opcji -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
Opcje -X są niestandardowe i mogą ulec zmianie bez powiadomienia.
Mam nadzieję, że to pomoże Ci zrozumieć Xms
, Xmx
jak również wiele innych rzeczy, które mają największe znaczenie :)
Samo pytanie zostało już omówione powyżej. Po prostu dodajemy część wartości domyślnych.
Jak na http://docs.oracle.com/cd/E13150_01/jrockit_jvm/jrockit/jrdocs/refman/optionX.html
Domyślna wartość Xmx będzie zależała od platformy i ilości pamięci dostępnej w systemie.