Мне нужно проверить, явно ли установлена какая-либо опция, которая может быть передана в JVM, или имеет значение по умолчанию.
Чтобы быть более конкретным: мне нужно создать один конкретный поток с более высоким собственным размером стека, чем по умолчанию, но в случае, если пользователь хочет сам позаботиться о таких вещах, указав -Xss
опцию, я хочу создать все потоки с размером стека по умолчанию (который будет указан пользователем в опции -Xss).
Я проверил классы как java.lang.System
и java.lang.Runtime
, но они не дают мне никакой полезной информации об аргументах VM.
Есть ли способ получить нужную мне информацию?
java
jvm
jvm-arguments
okutane
источник
источник
final StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace();
final String mainClassName = stackTrace[stackTrace.length - 1].getClassName());
sun.java.command
системном свойстве; Я сказал, что свойство можно использовать для получения имени основного класса (хотя я и не упомянул, как отметил @laz, это свойство присутствует только в JVM Oracle).При запуске пройти этот
-Dname=value
а затем в вашем коде вы должны использовать
чтобы получить это значение
источник
-Dname=value
являются аргументами JVM и что между аргументами нет принципиальной разницы-X
. На самом деле, они оба передаются в java, а не в приложение из командной строки, и в качестве примера, в maven, вы можете передать оба как-Drun.jvmArguments=...
. Я верю, что именно поэтому за это проголосовали.Я обнаружил, что HotSpot перечисляет все аргументы VM в bean-компоненте управления, кроме -client и -server. Таким образом, если вы выводите аргумент -client / -server из имени виртуальной машины и добавляете его в список bean-компонента среды выполнения, вы получаете полный список аргументов.
Вот SSCCE:
Можно сделать короче, если вы хотите аргументы в
List<String>
.Последнее замечание: мы могли бы также расширить это, чтобы обработать редкий случай наличия пробелов в аргументах командной строки.
источник
Я не пытался получить конкретные настройки ВМ, но в утилитах JMX, особенно в утилитах MXBean, содержится много информации. Это было бы то, где я бы начал. Надеюсь, вы найдете что-то там, чтобы помочь вам.
На сайте Sun есть куча технологий:
http://java.sun.com/javase/6/docs/technotes/guides/management/mxbeans.html
источник
Если вам нужна вся командная строка вашего Java-процесса, вы можете использовать: JvmArguments.java (использует комбинацию JNA + / proc для охвата большинства реализаций Unix)
источник