2010-04-29 12 views

risposta

20

Dipende dalla JVM, forse dalla versione ... forse anche da quante graffette hai sulla tua scrivania in quel momento. Potrebbe anche non funzionare. Non farlo.

Se è fuori dal tuo controllo per qualche motivo, compila ed esegui nello stesso modo in cui eseguiresti il ​​tuo contenitore. Ma attenzione, affidarsi all'ordine delle opzioni è una pessima idea.

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 - meglio contare quelle graffette :-). Seriamente, non è la scienza missilistica a cambiare ciò che sta passando quegli argomenti ambigui. –

+2

ha provato con un numero diverso di graffette. non riesco a trovare il passaggio al primo – OganM

9

Scommetto che è il secondo. Gli argomenti sono di solito elaborate nell'ordine:

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

Ma se io stessi scrivendo argomento Java parser, mi piacerebbe si lamentano su argomenti contrastanti.

29

IBM JVM considera l'istanza più a destra di un argomento come il vincitore. Non riesco a parlare con HotSpot, ecc.

Facciamo questo perché ci sono linee di comando spesso annidate da file batch dove le persone possono solo aggiungere alla fine e vogliono renderlo il vincitore.

+12

+1 per rispondere effettivamente alla domanda anziché pontificare. – JimN

+0

Infatti: 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 sembra anche prendere il valore più a destra, almeno per -Xms.

+10

+1 per rispondere effettivamente alla domanda invece di pontificare. – JimN

+0

proprio come il CSS, il successivo vince – ryenus

33

Come sempre, controllare l'implementazione specifica della JVM locale, ma qui è un modo rapido per controllare dalla riga di comando senza dover codificare.

> 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} 

Così vedrete in questo caso, la seconda istanza dell'argomento (2G) è quello che ha la precedenza (almeno in 1.8) e che è stata la mia esperienza con la maggior parte delle altre versioni moderne pure.

+7

'java -Xmx1G -XX: + PrintFlagsFinal -Xmx2G 2>/dev/null | grep MaxHeapSize', in questo modo è più facile dedurre. – ryenus

Problemi correlati