Je dois vérifier si une option qui peut être passée à JVM est explicitement définie ou a sa valeur par défaut.
Pour être plus précis: je dois créer un thread spécifique avec une taille de pile native plus élevée que celle par défaut, mais au cas où l'utilisateur voudrait s'occuper de ces choses par lui-même en spécifiant l' -Xss
option Je veux créer tous les threads avec la taille de pile par défaut (qui sera spécifié par l'utilisateur dans l'option -Xss).
J'ai vérifié des classes comme java.lang.System
et java.lang.Runtime
, mais celles-ci ne me donnent aucune information utile sur les arguments de VM.
Existe-t-il un moyen d'obtenir les informations dont j'ai besoin?
java
jvm
jvm-arguments
okutane
la source
la source
final StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace();
final String mainClassName = stackTrace[stackTrace.length - 1].getClassName());
sun.java.command
propriété système; J'ai dit que la propriété peut être utilisée pour acquérir le nom de la classe principale (bien que je n'ai pas mentionné, comme @laz l'a souligné, cette propriété n'est présente que sur la JVM d'Oracle).Au démarrage, passez ceci
-Dname=value
puis dans votre code, vous devez utiliser
pour obtenir cette valeur
la source
-Dname=value
sont des arguments JVM et qu'il n'y a pas de différence intrinsèque aux-X
arguments. En fait, ils sont tous deux passés à java et non à l'application en ligne de commande et comme preuve par exemple, dans maven, vous pouvez passer les deux en tant que-Drun.jvmArguments=...
. Je crois que c'est pourquoi il est voté pour.J'ai trouvé que HotSpot répertorie tous les arguments VM dans le bean de gestion à l'exception de -client et -server. Ainsi, si vous déduisez l'argument -client / -server du nom de la VM et que vous l'ajoutez à la liste du bean de gestion d'exécution, vous obtenez la liste complète des arguments.
Voici le SSCCE:
Peut être raccourci si vous voulez les arguments dans un fichier
List<String>
.Note finale: Nous pourrions également vouloir étendre cela pour gérer le cas rare d'avoir des espaces dans les arguments de ligne de commande.
la source
Je n'ai pas essayé d'obtenir spécifiquement les paramètres de la VM, mais il y a une mine d'informations dans les utilitaires JMX, en particulier les utilitaires MXBean. Ce serait là que je commencerais. J'espère que vous y trouverez quelque chose pour vous aider.
Le site Web du soleil a un tas de technologies:
http://java.sun.com/javase/6/docs/technotes/guides/management/mxbeans.html
la source
Si vous voulez la ligne de commande entière de votre processus java, vous pouvez utiliser: JvmArguments.java (utilise une combinaison de JNA + / proc pour couvrir la plupart des implémentations Unix)
la source