Berücksichtigung der folgenden Befehlszeile
java -Xms128m -Xms256m myapp.jar
Welche Einstellungen gelten für JVM-Mindestspeicher ( Xms
Option): 128 m oder 256 m?
Berücksichtigung der folgenden Befehlszeile
java -Xms128m -Xms256m myapp.jar
Welche Einstellungen gelten für JVM-Mindestspeicher ( Xms
Option): 128 m oder 256 m?
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());
}
}
Ü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.
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.
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.
Welche Einstellungen gelten für JVM Minimum Memory?
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}