Pourquoi les architectes de Java n'ont-ils pas simplement permis de faire:
java -jar -myProp="Hello World" myProgram.jar
Cela pourrait fonctionner aujourd'hui, mais imaginons que dans les prochaines versions de Java, un argument -myProp
soit introduit en tant qu'option JVM.
Comment distinguer votre -myProp
de l'option -myProp
JVM ? Impossible.
Il existe donc une raison évidente d'utiliser -D
pour définir des propriétés système.
Par exemple, au lieu de -myProp
, supposez que votre programme dépende d'une propriété système -client
.
Cela ne fonctionnera pas :
java -jar -client="davidxxx" myProgram.jar
Vous obtiendrez une erreur JVM telle que :
Option non reconnue : -client=davidxxx
car -client
est une option standard JVM qui n'attend aucune valeur.
Mais si vous utilisez -D-client
, tout va bien car ici -Dclient
est défini en tant que propriété système distincte de l'option standard JVM -client
:
java -jar -D-client="davidxxx" myProgram.jar
Ou en utilisant les deux :
java -jar -client -D-client="davidxxx" myProgram.jar
Pour aller plus loin, tous les arguments JVM ne commencent pas par -D
. mais la plupart ont un préfixe (-D
, -X
, -XX
) qui permet en quelque sorte de définir des espaces de noms.
Vous avez différentes catégories d'arguments JVM :
1. Options standard (-D
mais pas seulement).
Il s'agit des options les plus couramment utilisées et prises en charge par toutes les implémentations de la JVM.
Vous utilisez -D
pour spécifier les propriétés système, mais la plupart n'ont pas de préfixe : -verbose
, -showversion
, et ainsi de suite...
2. Options non standard (précédées de -X
)
Ces options sont des options générales spécifiques à la machine virtuelle Java HotSpot.
Par exemple : -Xmssize
, -Xmxsize
3. Options d'exécution avancées (précédées de -XX
)
Ces options contrôlent le comportement d'exécution de la machine virtuelle Java HotSpot.
4. Options avancées du compilateur JIT (précédées de -XX
)
Ces options contrôlent la compilation just-in-time dynamique effectuée par la machine virtuelle Java HotSpot.
5. Options avancées de serviceabilité (précédées de -XX
)
Ces options offrent la possibilité de recueillir des informations système et de réaliser un débogage approfondi.
6. Options avancées de collecte des déchets (précédées de -XX
)
Ces options contrôlent la manière dont la collecte des déchets (GC) est effectuée par la machine virtuelle Java HotSpot.
0 votes
C'est une bonne question pour les développeurs Oracle/Sun. Au fait, pourquoi est-ce un problème pour vous?
15 votes
@BackSlash J'aime comprendre le "pourquoi" au-delà du simple "faire fonctionner les choses".
0 votes
Toutes les bonnes réponses; malheureusement, je ne peux en accepter qu'une seule. Merci les gars pour l'illumination!
0 votes
Note : documentation officielle de l'Outil Java
0 votes
Merci pour la note @CarlosHeuberger. Est-ce qu'elle explique pourquoi la lettre D à la suite de ce que les réponses existantes expliquent?
0 votes
Il s'agit plus d'une note indiquant où trouver davantage d'informations sur les options si quelqu'un trouve ces questions en effectuant une recherche à ce sujet.
3 votes
Possible duplicate de En java, que signifie le D dans -D?
1 votes
@Autar Ce n'est pas un doublon. Bien qu'il réponde à la 'Question Bonus', il ne répond pas à la question principale.
0 votes
@Autar bien repéré et merci pour ce lien. Comme l'a suggéré Mark, les deux questions se chevauchent mais sont distinctes et chacune ajoute de la valeur.