Как определить, работает ли VM в режиме сервера или клиента?
Java hotspot vpm может быть запущен с аргументом -client или -server. Если ни один из них не указан, он выбирает один в соответствии с некоторыми правилами.
Можно ли указать, работает ли работающая виртуальная машина в режиме клиента или сервера, когда режим не указан в командной строке? Мне нужно это в окне Windows вне рабочего процесса.
Я понимаю, что это не вопрос программирования, но я надеюсь, что это нормально, потому что это связано с программированием. Спасибо заранее.
Ответы
Ответ 1
В Java вы можете проверить это с помощью этого кода:
String s = System.getProperty("java.vm.name");
// s = Java HotSpot(TM) Server VM
Но это будет очень специфичным для вендора.
В командной строке вы можете использовать jinfo (используется для проверить значение данной опции HotSpot VM)
C:\>"c:\Program Files\Java\jdk1.6.0_16\bin\jps.exe" -l -m
21812 sun.tools.jps.Jps -l -m
19244 (eclipse)
C:\>"c:\Program Files\Java\jdk1.6.0_16\bin\jinfo.exe" -flag NewRatio 19244
-XX:NewRatio=12
С
- редко можно установить параметр Newratio Hotpot и
- В документации указано: отношение размеров нового/старого поколения.
[x86 -server: 8; x86 -client: 12]
12 означает "Клиент".
Ответ 2
Подключитесь к запущенному процессу Java с помощью jvisualvm. Это позволит вам увидеть аргументы JVM, которые были использованы.
Ответ 3
Вы можете получить эту информацию, подключившись к серверу MBean. Если вы используете Sun VM, у вас есть MBean с именем "java.lang: type = Runtime", который предоставляет атрибут "VmName", значение которого совпадает с системным свойством "java.vm.name". В примере, для сервера vm значение будет чем-то вроде "Java HotSpot (TM) Server VM". VM от других поставщиков может использовать аналогичный механизм.
Вы можете подключиться к серверу MBean либо с помощью инструментов, включенных в JDK, например, jconsole или jvisualvm, либо путем написания собственного инструмента с помощью JMX, если вам нужен программный доступ.
Ответ 4
Если jvm запущен с -debug, вы можете подключиться к нему с помощью jdb и использовать eval...
eval System.getProperty("java.vm.name");
что или jinfo