Чтение свойств системы 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 как указано в ответах выше.