2010-04-29 6 views

Antwort

20

Abhängig von der JVM, vielleicht die Version ... vielleicht sogar wie viele Büroklammern Sie auf Ihrem Schreibtisch zu der Zeit haben. Es könnte nicht einmal funktionieren. Tu das nicht.

Wenn es aus irgendwelchen Gründen nicht in Ihrer Kontrolle ist, kompilieren Sie es und führen Sie es auf dieselbe Weise aus, wie Sie Ihr jar ausführen würden. Aber seien Sie gewarnt, sich auf die Reihenfolge der Optionen zu verlassen ist eine wirklich schlechte Idee.

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()); 
    } 
} 
+2

+1 - besser zählen diese Büroklammern :-). Im Ernst, es ist kein Hexenwerk, das zu ändern, was diese zweideutigen Argumente passiert. –

+2

wurde mit einer anderen Anzahl von Büroklammern versucht. kann nicht auf die erste – OganM

9

Ich wette, es ist der zweite. Argumente werden in der Regel in der Reihenfolge verarbeitet:

for(int i=0; i<argc; i++) { 
    process_argument(argv[i]); 
} 

Aber wenn ich Java-Argument Parser geschrieben haben, würde ich auf widersprüchliche Argumente beklagen.

29

Die IBM JVM behandelt die rechte Instanz eines Arguments als Gewinner. Ich kann nicht mit HotSpot, etc. sprechen.

Wir tun dies, weil es oft tief verschachtelte Befehlszeilen aus Batch-Dateien, wo die Leute nur bis zum Ende hinzufügen können, und wollen, dass der Gewinner zu machen.

+12

+1 für die tatsächliche Beantwortung der Frage anstelle der Pontification finden. – JimN

+0

In der Tat: https://www.ibm.com/support/knowledgecenter/SSYKE2_7.0.0/com.ibm.java.zos.70.doc/diag/appendixes/cmdline/cmdline_specifying.html –

25

FTR, OpenJDK 1.7 scheint auch den rechten Wert zu nehmen, zumindest für -Xms.

+10

+1 für die tatsächliche Beantwortung der Frage statt zu predigen. – JimN

+0

genau wie CSS, gewinnt der spätere – ryenus

33

Wie immer, überprüfen Sie die spezifische Implementierung Ihrer lokalen JVM, aber hier ist eine schnelle Möglichkeit, von der Befehlszeile aus zu überprüfen, ohne Code programmieren 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} 

So werden Sie in diesem Fall sehen, die zweite Instanz des Arguments (2G) ist das, was Vorrang (zumindest in 1,8) hat, und das hat meine Erfahrung mit dem meisten anderen modernen Versionen auch gewesen.

+7

'java -Xmx1G -XX: + PrintFlagsFinal -Xmx2G 2>/dev/null | grep MaxHeapSize', so ist es einfacher abzuleiten. – ryenus

Verwandte Themen