Muszę sprawdzić, czy jakaś opcja, którą można przekazać do JVM, jest jawnie ustawiona lub ma wartość domyślną.
Mówiąc dokładniej: muszę utworzyć jeden konkretny wątek z większym rodzimym rozmiarem stosu niż domyślny, ale na wypadek, gdyby użytkownik chciał sam zająć się takimi sprawami, określając -Xss
opcję Chcę utworzyć wszystkie wątki z domyślnym rozmiarem stosu (co zostanie określone przez użytkownika w opcji -Xss).
Sprawdziłem klasy takie jak java.lang.System
i java.lang.Runtime
, ale nie dają mi one żadnych przydatnych informacji o argumentach VM.
Czy jest jakiś sposób na uzyskanie potrzebnych informacji?
java
jvm
jvm-arguments
okutan
źródło
źródło
final StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace();
final String mainClassName = stackTrace[stackTrace.length - 1].getClassName());
sun.java.command
właściwości systemowej; Powiedziałem, że właściwość można wykorzystać do uzyskania nazwy klasy głównej (chociaż nie wspomniałem, jak wskazał @laz, ta właściwość jest obecna tylko w JVM Oracle).Przy starcie podaj to
-Dname=value
a następnie w swoim kodzie powinieneś użyć
aby uzyskać tę wartość
źródło
-Dname=value
są argumentami JVM i że nie ma wewnętrznej różnicy między-X
argumentami. W rzeczywistości oba są przekazywane do java, a nie do aplikacji w wierszu poleceń i jako przykład w maven można przekazać oba jako-Drun.jvmArguments=...
. Uważam, że dlatego jest głosowany za.Odkryłem, że HotSpot wyświetla wszystkie argumenty maszyny wirtualnej w komponencie bean zarządzania, z wyjątkiem -client i -server. Tak więc, jeśli wywnioskujesz argument -client / -server z nazwy maszyny wirtualnej i dodasz go do listy komponentu bean zarządzania w czasie wykonywania, otrzymasz pełną listę argumentów.
Oto SSCCE:
Można skrócić, jeśli chcesz, aby argumenty w pliku
List<String>
.Ostatnia uwaga: możemy również chcieć to rozszerzyć, aby obsłużyć rzadki przypadek spacji w argumentach wiersza poleceń.
źródło
Nie próbowałem konkretnie uzyskać ustawień maszyny wirtualnej, ale w narzędziach JMX jest mnóstwo informacji, szczególnie w narzędziach MXBean. To byłby punkt, w którym bym zaczął. Miejmy nadzieję, że znajdziesz tam coś, co ci pomoże.
Witryna Sun zawiera sporo informacji na temat technologii:
http://java.sun.com/javase/6/docs/technotes/guides/management/mxbeans.html
źródło
Jeśli chcesz mieć całą linię poleceń swojego procesu java, możesz użyć: JvmArguments.java (używa kombinacji JNA + / proc do obsługi większości implementacji unixowych)
źródło