Preciso verificar se alguma opção que pode ser passada para a JVM está definida explicitamente ou tem seu valor padrão.
Para ser mais específico: preciso criar um encadeamento específico com tamanho de pilha nativo mais alto que o padrão, mas caso o usuário queira cuidar de tais coisas, especificando a -Xss
opção Desejo criar todos os encadeamentos com tamanho de pilha padrão (que será especificado pelo usuário na opção -Xss).
Eu verifiquei classes como java.lang.System
e java.lang.Runtime
, mas elas não estão me fornecendo informações úteis sobre argumentos da VM.
Existe alguma maneira de obter as informações necessárias?
java
jvm
jvm-arguments
okutane
fonte
fonte
final StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace();
final String mainClassName = stackTrace[stackTrace.length - 1].getClassName());
sun.java.command
propriedade do sistema; Eu disse que a propriedade pode ser usada para adquirir o nome da classe principal (embora eu não tenha mencionado, como o @laz apontou, essa propriedade está presente apenas na JVM da Oracle).Na inicialização, passe isso
-Dname=value
e então no seu código você deve usar
para obter esse valor
fonte
-Dname=value
são argumentos da JVM e que não há diferença intrínseca aos-X
argumentos. Na verdade, eles são passados para java e não para o aplicativo na linha de comando e, como evidência por exemplo, no maven você pode passar os dois como-Drun.jvmArguments=...
. Eu acredito que é por isso que é votado.Descobri que o HotSpot lista todos os argumentos da VM no bean de gerenciamento, exceto -client e -server. Portanto, se você inferir o argumento -client / -server a partir do nome da VM e adicioná-lo à lista do bean de gerenciamento de tempo de execução, obterá a lista completa de argumentos.
Aqui está o SSCCE:
Pode ser reduzido se você quiser os argumentos em a
List<String>
.Nota final: também podemos estender isso para lidar com o caso raro de ter espaços nos argumentos da linha de comando.
fonte
Não tentei obter especificamente as configurações da VM, mas há muitas informações nos utilitários JMX, especificamente nos utilitários MXBean. Aqui seria onde eu começaria. Espero que você encontre algo para ajudá-lo.
O site da sun tem um monte de tecnologia:
http://java.sun.com/javase/6/docs/technotes/guides/management/mxbeans.html
fonte
Se você quiser toda a linha de comandos do seu processo java, poderá usar: JvmArguments.java (usa uma combinação de JNA + / proc para cobrir a maioria das implementações unix)
fonte