Was sind die Parameter -Xms und -Xmx beim Starten von JVM?

1008

Bitte erläutern Sie die Verwendung Xmsund XmxParameter in JVMs. Was sind die Standardwerte für sie?

Pankaj
quelle
2
Wenn Sie -Xmx128m -Xms64mes verwenden, kann es um 275mRES mem herum einen Spitzenwert erreichen , aber wenn Sie -Xmx128m -Xms128mes verwenden, kann es um 550mRES mem herum einen Spitzenwert erreichen. Verwenden von Java 8 Das Beste ist, den GC zu betonen und zu sehen, was passiert ...
Christophe Roussy

Antworten:

1360

Das Flag Xmxgibt den maximalen Speicherzuweisungspool für eine Java Virtual Machine (JVM) an, während Xmsdas anfängliche Speicherzuweisungspool angegeben wird.

Dies bedeutet, dass Ihre JVM mit XmsSpeicherplatz gestartet wird und maximal XmxSpeicherplatz beanspruchen kann. Wenn Sie beispielsweise eine JVM wie unten starten, wird sie mit 256 MB Arbeitsspeicher gestartet und der Prozess kann bis zu 2048 MB Arbeitsspeicher verwenden:

java -Xms256m -Xmx2048m

Das Speicherflag kann auch in verschiedenen Größen angegeben werden, z. B. Kilobyte, Megabyte usw.

-Xmx1024k
-Xmx512m
-Xmx8g

Das XmsFlag hat keinen Standardwert und Xmxnormalerweise einen Standardwert von 256 MB. Diese Flags werden häufig verwendet, wenn Sie auf a stoßen java.lang.OutOfMemoryError.

Beachten Sie bei der Verwendung dieser Einstellungen, dass diese Einstellungen für den Heap der JVM gelten und dass die JVM mehr Speicher als nur die dem Heap zugewiesene Größe verwenden kann / wird. Aus der Oracle-Dokumentation :

Beachten Sie, dass die JVM mehr Speicher als nur den Heap verwendet. Beispielsweise werden Java-Methoden, Thread-Stapel und native Handles im vom Heap getrennten Speicher sowie interne JVM-Datenstrukturen zugewiesen.

Hexacyanid
quelle
12
Wenn also die Speichernutzung Xmx überschreitet, erhalten wir eine Ausnahme von jvm out of memory.
Pankaj
59
Ja das ist richtig. Wenn es versucht, das zu überschreiten, obwohl es möglicherweise Müll sammelt, um zu versuchen, genügend Speicher freizugeben. Wenn immer noch nicht genügend Speicher vorhanden ist, um die Anforderung zu erfüllen, und der Heap bereits die maximale Größe erreicht hat, tritt ein OutOfMemoryErrorFehler auf.
David Conrad
2
Wenn ich das ForkJoin-Framework verwende, stürzt mein Computer ab, weil er zu viel Speicherplatz beansprucht. Ist es möglich, dass unter OpenJDK standardmäßig keine feste Speicherbeschränkung besteht?
Christophe De Troyer
6
Wie bei geklärte Does Java -Xmx 1G bedeuten 1 GB oder 2 ^ 30 B? Die eindeutige Methode, um auszudrücken, mit wie viel Speicher Sie über beginnen, -Xms256mist "256 MiB", nicht "256 MB", da es sich eher um binäre Potenzen als um Zehnerpotenzen handelt. Siehe en.wikipedia.org/wiki/Binary_prefix . Da außerdem nicht verwendbarer Speicherplatz für einen zusätzlichen Pool von Survivor-Speicherplatz Runtime.getRuntime().maxMemory()reserviert ist , ist die tatsächlich verfügbare Speichermenge geringer als der Wert, der über -Xmx
nealmcb
1
Eine nützliche Anleitung für häufige Fehler in Bezug auf die Größe des Heapspeichers
ctrlplusb
315

Führen Sie den Befehl aus, java -Xund Sie erhalten eine Liste aller -XOptionen:

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

Die -X-Optionen sind nicht Standard und können ohne vorherige Ankündigung geändert werden.

Ich hoffe, dies wird Ihnen helfen, zu verstehen Xms, Xmxsowie viele andere Dinge, die am wichtigsten sind. :) :)

Rupesh Yadav
quelle
1
Habe heute einen neuen Befehl gelernt, danke @RupeshYadav
jump_monkey
18

Sie können es in Ihrer IDE angeben. Zum Beispiel für Eclipse in Run ConfigurationsVM-Argumente . Sie können eingeben -Xmx800m -Xms500mals

Geben Sie hier die Bildbeschreibung ein

Mehrez BEN MOHAMED
quelle
In RubyMine unter OSX befindet es sich im Menü Hilfe> Benutzerdefinierte VM-Optionen bearbeiten.
Jon Schneider
8
Dies beantwortet die Frage nicht. Die Frage ist, wofür sie sind und nicht, wie sie eingestellt werden sollen.
Captain Man
@Hearen Wie trenne ich mich in Intellij?
13

Die Frage selbst wurde bereits oben angesprochen. Fügen Sie einfach einen Teil der Standardwerte hinzu.

Gemäß http://docs.oracle.com/cd/E13150_01/jrockit_jvm/jrockit/jrdocs/refman/optionX.html

Der Standardwert von Xmx hängt von der Plattform und der im System verfügbaren Speichermenge ab.

Abhishek Aich
quelle
8
Weitere JVMs (außer JRockit) finden Sie in diesem Beitrag, um die Standard-Xmx / Xms-Werte Ihrer JVM zu ermitteln: stackoverflow.com/questions/4667483/…
Ogre Psalm33
3

-Xms anfängliche Heap-Größe für den Start Während des Arbeitsprozesses kann die Heap-Größe jedoch aufgrund von Inaktivität oder GC-Iterationen der Benutzer kleiner als -Xms sein . Dies ist keine minimal erforderliche Heap-Größe.

-Xmx maximale Heap-Größe

Lazylead
quelle