Considerando la seguente riga di comandoOpzioni di runtime Java duplicate: qual è l'ordine di preferenza?
java -Xms128m -Xms256m myapp.jar
Quali impostazioni si applicheranno per la JVM Memoria minima (Xms
opzionale): 128m o 256m?
Considerando la seguente riga di comandoOpzioni di runtime Java duplicate: qual è l'ordine di preferenza?
java -Xms128m -Xms256m myapp.jar
Quali impostazioni si applicheranno per la JVM Memoria minima (Xms
opzionale): 128m o 256m?
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());
}
}
+1 - meglio contare quelle graffette :-). Seriamente, non è la scienza missilistica a cambiare ciò che sta passando quegli argomenti ambigui. –
ha provato con un numero diverso di graffette. non riesco a trovare il passaggio al primo – OganM
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.
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.
+1 per rispondere effettivamente alla domanda anziché pontificare. – JimN
Infatti: https://www.ibm.com/support/knowledgecenter/SSYKE2_7.0.0/com.ibm.java.zos.70.doc/diag/appendixes/cmdline/cmdline_specifying.html –
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.
'java -Xmx1G -XX: + PrintFlagsFinal -Xmx2G 2>/dev/null | grep MaxHeapSize', in questo modo è più facile dedurre. – ryenus
Nessun errore di battitura in questione. Le opzioni Xms vengono utilizzate due volte di proposito. Questa è la sostanza della domanda – fabien7474