93 votes

Options d'exécution Java dupliquées : quel est l'ordre de préférence ?

Considérant la ligne de commande suivante

java -Xms128m -Xms256m myapp.jar

Quels paramètres s'appliqueront à la mémoire JVM Minimum (optionXms) : 128m ou 256m ?

68voto

David Hergert Points 194

Comme toujours, vérifiez l'implémentation spécifique de votre JVM local, 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 priorité (au moins en 1.8) et c'est ce que j'ai vécu avec la plupart des autres versions modernes.

40voto

Trent Gray-Donald Points 1395

IBM JVM traite l'instance la plus juste d'un argument comme le gagnant. Je ne peux pas parler à HotSpot, etc.

Nous le faisons car il y a souvent des lignes de commande profondément imbriquées à partir de fichiers batch où les gens ne peuvent qu'ajouter à la fin, et veulent en faire le gagnant.

38voto

user3156929 Points 41

FTR, OpenJDK 1.7 semble également prendre la valeur la plus juste, au moins pour -Xms.

30voto

cHao Points 42294

Ça dépend de la JVM, peut-être de la version...peut-être même du nombre de trombones que vous avez sur votre bureau à ce moment-là. Ça ne marchera peut-être même pas. Ne fais pas ça.

Si c'est hors de votre contrôle pour une raison quelconque, compilez et exécutez ceci de la même manière que vous exécuteriez votre bocal. Mais attention, s'appuyer sur 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());
    }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X