Considérant la ligne de commande suivante
Java -Xms128m -Xms256m myapp.jar
Quels paramètres s'appliquent à la mémoire JVM minimale (option Xms
): 128 m ou 256 m?
Cela dépend de la JVM, peut-être de la version ... peut-être même du nombre de trombones que vous avez sur votre bureau à l'époque. Cela pourrait même ne pas fonctionner. Ne fais pas ça.
Si c'est hors de votre contrôle pour une raison quelconque, compilez-le et exécutez-le de la même manière que vous exécuteriez votre bocal. Mais attention, se fier à l'ordre des options est une très mauvaise idée.
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());
}
}
Comme toujours, vérifiez l'implémentation spécifique de votre JVM locale, mais voici un moyen rapide de vérifier à partir de la ligne de commande sans avoir à coder.
> 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}
Donc, vous verrez dans ce cas, la deuxième instance de l'argument (2G) est ce qui a la priorité (au moins en 1.8) et c'est aussi mon expérience avec la plupart des autres versions modernes.
IBM JVM traite l'instance la plus à droite d'un argument comme la gagnante. Je ne peux pas parler à HotSpot, etc.
Nous le faisons car il existe souvent des lignes de commande profondément imbriquées à partir de fichiers de commandes où les gens ne peuvent ajouter qu'à la fin et veulent en faire le gagnant.
FTR, OpenJDK 1.7 semble également prendre la valeur la plus à droite, au moins pour -Xms.
Je parie que c'est le deuxième. Les arguments sont généralement traités dans l'ordre:
for( int i=0; i<argc; i++ ) {
process_argument(argv[i]);
}
Mais si j'écrivais Java, je me plaindrais d'arguments contradictoires.