Ich muss überprüfen, ob eine Option, die an JVM übergeben werden kann, explizit festgelegt ist oder ihren Standardwert hat.
Genauer gesagt: Ich muss einen bestimmten Thread mit einer höheren nativen Stapelgröße als der Standardstapel erstellen. Falls der Benutzer sich jedoch selbst um solche Dinge kümmern möchte, geben Sie die -Xss
Option an, mit der ich alle Threads mit der Standardstapelgröße erstellen möchte (Dies wird vom Benutzer in der Option -Xss angegeben).
Ich habe Klassen wie java.lang.System
und überprüft java.lang.Runtime
, aber diese geben mir keine nützlichen Informationen zu VM-Argumenten.
Gibt es eine Möglichkeit, die benötigten Informationen zu erhalten?
java
jvm
jvm-arguments
okutane
quelle
quelle
final StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace();
final String mainClassName = stackTrace[stackTrace.length - 1].getClassName());
sun.java.command
Systemeigenschaft befinden. Ich sagte, dass die Eigenschaft verwendet werden kann, um den Namen der Hauptklasse zu erhalten (obwohl ich nicht erwähnt habe, wie @laz hervorhob, dass die Eigenschaft nur in der JVM von Oracle vorhanden ist).Übergeben Sie dies beim Start
-Dname=value
und dann in Ihrem Code sollten Sie verwenden
um diesen Wert zu bekommen
quelle
-Dname=value
JVM-Argumente sind und dass es keinen wesentlichen Unterschied zu-X
Argumenten gibt. Tatsächlich werden beide an Java und nicht an die Anwendung in der Befehlszeile übergeben, und als Beispiel können Sie in maven beide als übergeben-Drun.jvmArguments=...
. Ich glaube, deshalb wird es positiv bewertet.Ich habe festgestellt, dass HotSpot alle VM-Argumente in der Management-Bean mit Ausnahme von -client und -server auflistet. Wenn Sie also das Argument -client / -server aus dem VM-Namen ableiten und dieses zur Liste der Laufzeitverwaltungs-Beans hinzufügen, erhalten Sie die vollständige Liste der Argumente.
Hier ist die SSCCE:
Könnte kürzer gemacht werden, wenn Sie die Argumente in a wollen
List<String>
.Schlussbemerkung: Möglicherweise möchten wir dies auch erweitern, um den seltenen Fall von Leerzeichen in Befehlszeilenargumenten zu behandeln.
quelle
Ich habe nicht versucht, die VM-Einstellungen speziell abzurufen, aber die JMX-Dienstprogramme enthalten eine Fülle von Informationen, insbesondere die MXBean-Dienstprogramme. Hier würde ich anfangen. Hoffentlich finden Sie dort etwas, das Ihnen hilft.
Die Sun-Website hat eine Menge über die Technologie:
http://java.sun.com/javase/6/docs/technotes/guides/management/mxbeans.html
quelle
Wenn Sie die gesamte Befehlszeile Ihres Java-Prozesses verwenden möchten , können Sie Folgendes verwenden : JvmArguments.java (verwendet eine Kombination aus JNA + / proc, um die meisten Unix-Implementierungen abzudecken)
quelle