Чтение свойств системы Java из командной строки
Есть ли лучший способ распечатать системные свойства из командной строки? Как мы можем установить свойство, например,
java -D<name>=<value> //set a system property
Без написания класса, чтобы сделать это?
Если это невозможно, то почему это невозможно/выполнимо/хорошо сделать из командной строки?
Ответы
Ответ 1
Вы можете использовать флаг -XshowSettings
в JVM версии Hotspot версии 1.7 и выше (не поддерживается в 1.6):
java -XshowSettings:properties -version
OpenJDK поддерживает этот флаг с конца 2010 года.
Видно в http://marxsoftware.blogspot.de/2016/02/hotspot-jvm-XshowSettings.html
РЕДАКТИРОВАТЬ 14 декабря 2016 г.
Oracle JVM поставляется с инструментом jcmd, который позволяет вам видеть флагов, присутствующих в запущенной JVM. См:
https://docs.oracle.com/javase/8/docs/technotes/guides/troubleshoot/tooldescr006.html
В этом случае вы можете использовать:
jcmd <pid> VM.system_properties
Но есть и много других полезных команд. Например:
jcmd <pid> VM.flags
jcmd <pid> VM.command_line
jcmd <pid> GC.run
Ответ 2
Вы можете использовать jps инструмент, который поставляется с jdk.
Он может распечатывать свойства системы, которые были переданы в Java-процесс.
Например: В моей системе eclipse запущен и
$ jps -v
выходы
6632 -Dosgi.requiredJavaVersion=1.6 -Xms1024m -Xmx2048m -XX:MaxPermSize=512m
jps
находится в JDK_HOME/bin
ИЗМЕНИТЬ
Если вы хотите, чтобы все свойства использовали инструмент jinfo, который также находится в JDK_HOME/bin
. Чтобы использовать его, вы должны знать идентификатор процесса java-процесса, из которого вы хотите получить информацию. Например.
$ jinfo 6632
Этот инструмент также выводит java.ext.dirs
Ответ 3
Если вам нужны значения по умолчанию, которые ваша JVM изначально установит, если они не переопределены, используйте:
java -XshowSettings:properties -version
Это полезно, если у вас еще не запущено приложение Java, поэтому нет pid для передачи одной из других команд.
Если вы ищете свойства уже работающей JVM, свойства которой установлены по умолчанию или заданы явно командой, то используйте pid для этой JVM, найденной через jps
с помощью jps
jcmd
или jinfo
как указано в ответах выше.