Berücksichtigung der folgenden Befehlszeile
java -Xms128m -Xms256m myapp.jar
Welche Einstellungen gelten für JVM-Mindestspeicher ( Xms
Option): 128 m oder 256 m?
java
jvm
jvm-arguments
java-opts
fabien7474
quelle
quelle
Antworten:
Hängt von der JVM ab, vielleicht von der Version ... vielleicht sogar davon, wie viele Büroklammern Sie gerade auf Ihrem Schreibtisch haben. Es könnte nicht einmal funktionieren. Tu das nicht.
Wenn es aus irgendeinem Grund außerhalb Ihrer Kontrolle liegt, kompilieren Sie es und führen Sie es auf die gleiche Weise aus, wie Sie Ihr Glas ausführen würden. Aber seien Sie gewarnt, es ist eine wirklich schlechte Idee, sich auf die Reihenfolge der Optionen zu verlassen.
public class TotalMemory { public static void main(String[] args) { System.out.println("Total Memory: "+Runtime.getRuntime().totalMemory()); System.out.println("Free Memory: "+Runtime.getRuntime().freeMemory()); } }
quelle
Überprüfen Sie wie immer die spezifische Implementierung Ihrer lokalen JVM. Hier finden Sie jedoch eine schnelle Möglichkeit, dies über die Befehlszeile zu überprüfen, ohne codieren zu müssen.
> java -version; java -Xmx1G -XX:+PrintFlagsFinal -Xmx2G 2>/dev/null | grep MaxHeapSize java version "1.8.0_25" Java(TM) SE Runtime Environment (build 1.8.0_25-b17) Java HotSpot(TM) 64-Bit Server VM (build 25.25-b02, mixed mode) uintx MaxHeapSize := 2147483648 {product}
Sie werden also in diesem Fall sehen, dass die zweite Instanz des Arguments (2G) Vorrang hat (zumindest in 1.8), und das war meine Erfahrung mit den meisten anderen modernen Versionen.
quelle
java -Xmx1G -XX:+PrintFlagsFinal -Xmx2G 2>/dev/null | grep MaxHeapSize
Auf diese Weise ist es einfacher abzuleiten.Die IBM JVM behandelt die Instanz eines Arguments ganz rechts als Gewinner. Ich kann nicht mit HotSpot usw. sprechen.
Wir tun dies, da es häufig tief verschachtelte Befehlszeilen aus Batch-Dateien gibt, die nur am Ende hinzugefügt werden können und die zum Gewinner werden möchten.
quelle
FTR, OpenJDK 1.7 scheint ebenfalls den Wert ganz rechts anzunehmen, zumindest für -Xms.
quelle
Ich wette, es ist der zweite. Argumente werden normalerweise in der folgenden Reihenfolge verarbeitet:
for( int i=0; i<argc; i++ ) { process_argument(argv[i]); }
Aber wenn ich einen Java-Argument-Parser schreiben würde, würde ich mich über widersprüchliche Argumente beschweren.
quelle
In den verschiedenen unten aufgeführten Java-Versionen ist der "Gewinner" der am weitesten rechts stehende Wert in der Argumentliste. Wie andere betont haben, ist es keine gute Idee, sich darauf zu verlassen, aber vielleicht sind dies nützliche Informationen, um sie trotzdem zu teilen.
Java 1.8.0_172
~ $ java8 java version "1.8.0_172" Java(TM) SE Runtime Environment (build 1.8.0_172-b11) Java HotSpot(TM) 64-Bit Server VM (build 25.172-b11, mixed mode) ~ $ java -Xmx1024m -Xmx4024m -XX:+PrintFlagsFinal Test 2>/dev/null | grep MaxHeapSize uintx MaxHeapSize := 4219469824 {product}
Java 11.0.3
~ $ java11 java version "11.0.3" 2019-04-16 LTS Java(TM) SE Runtime Environment 18.9 (build 11.0.3+12-LTS) Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.3+12-LTS, mixed mode) ~ $ java -Xmx1024m -Xmx4024m -XX:+PrintFlagsFinal Test 2>/dev/null | grep MaxHeapSize size_t MaxHeapSize = 4219469824 {product} {command line}
OpenJDK 12.0.1
~ $ java12 openjdk version "12.0.1" 2019-04-16 OpenJDK Runtime Environment (build 12.0.1+12) OpenJDK 64-Bit Server VM (build 12.0.1+12, mixed mode, sharing) ~ $ java -Xmx1024m -Xmx4024m -XX:+PrintFlagsFinal Test 2>/dev/null | grep MaxHeapSize size_t MaxHeapSize = 4219469824 {product} {command line}
AdoptOpenJDK 12.0.1
~ $ java12a openjdk version "12.0.1" 2019-04-16 OpenJDK Runtime Environment AdoptOpenJDK (build 12.0.1+12) OpenJDK 64-Bit Server VM AdoptOpenJDK (build 12.0.1+12, mixed mode, sharing) ~ $ java -Xmx1024m -Xmx4024m -XX:+PrintFlagsFinal Test 2>/dev/null | grep MaxHeapSize size_t MaxHeapSize = 4219469824 {product} {command line}
OpenJDK 13-ea
~ $ java13 openjdk version "13-ea" 2019-09-17 OpenJDK Runtime Environment (build 13-ea+22) OpenJDK 64-Bit Server VM (build 13-ea+22, mixed mode, sharing) ~ $ java -Xmx1024m -Xmx4024m -XX:+PrintFlagsFinal Test 2>/dev/null | grep MaxHeapSize size_t MaxHeapSize = 4219469824 {product} {command line}
quelle