Necesito verificar si alguna opción que se puede pasar a JVM está establecida explícitamente o tiene su valor predeterminado.
Para ser más específico: necesito crear un hilo específico con un tamaño de pila nativo más alto que el predeterminado, pero en caso de que el usuario quiera encargarse de esas cosas por sí mismo especificando la -Xss
opción Quiero crear todos los hilos con el tamaño de pila predeterminado (que será especificado por el usuario en la opción -Xss).
He verificado clases como java.lang.System
y java.lang.Runtime
, pero estas no me dan información útil sobre los argumentos de VM.
¿Hay alguna forma de obtener la información que necesito?
java
jvm
jvm-arguments
okutane
fuente
fuente
final StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace();
final String mainClassName = stackTrace[stackTrace.length - 1].getClassName());
sun.java.command
propiedad del sistema; Dije que la propiedad se puede usar para adquirir el nombre de la clase principal (aunque no mencioné, como señaló @laz, esa propiedad solo está presente en la JVM de Oracle).Al inicio, pasa esto
-Dname=value
y luego en tu código deberías usar
para obtener ese valor
fuente
-Dname=value
son argumentos JVM y que no hay diferencia intrínseca a los-X
argumentos. En realidad, ambos se pasan a Java y no a la aplicación en la línea de comando y, como prueba por ejemplo, en Maven puedes pasar ambos como-Drun.jvmArguments=...
. Creo que es por eso que se vota.Descubrí que HotSpot enumera todos los argumentos de VM en el bean de administración, excepto -client y -server. Por lo tanto, si infiere el argumento -client / -server del nombre de la máquina virtual y lo agrega a la lista del bean de administración de tiempo de ejecución, obtendrá la lista completa de argumentos.
Aquí está el SSCCE:
Podría acortarse si desea los argumentos en a
List<String>
.Nota final: También podríamos querer extender esto para manejar el caso raro de tener espacios dentro de los argumentos de la línea de comando.
fuente
No he intentado obtener específicamente la configuración de VM, pero hay una gran cantidad de información en las utilidades JMX específicamente las utilidades MXBean. Aquí sería donde comenzaría. Espero que encuentres algo allí para ayudarte.
El sitio web de Sun tiene un montón de tecnología:
http://java.sun.com/javase/6/docs/technotes/guides/management/mxbeans.html
fuente
Si desea la línea de comando completa de su proceso java, puede usar: JvmArguments.java (usa una combinación de JNA + / proc para cubrir la mayoría de las implementaciones de Unix)
fuente