Как убедиться, что я использую "серверную" JVM? - PullRequest
8 голосов
/ 02 декабря 2009

JVM от Sun поставляется в двух вариантах: -client и -server, где предполагается, что серверная виртуальная машина оптимизирована для длительных процессов, и рекомендуется для серверных приложений.

Когда я запускаю java без параметров, отображаются параметры использования, включая следующий текст:

    The default VM is server,  
    because you are running on a server-class machine.

Увидев это, я не стал добавлять -server в команду запуска процесса.

Однако в недавнем журнале сбоев JVM я заметил следующую строку в конце файла:

vm_info: Java HotSpot(TM) Client VM (14.0-b16) for linux-x86 JRE (1.6.0_14-b08), built on May 21 2009 02:01:47 by "java_re" with gcc 3.2.1-7a (J2SE release)

Мне кажется, что Java использует клиентскую виртуальную машину, несмотря на то, что говорится в справочном сообщении. Я собираюсь добавить опцию -server в мою команду запуска, но теперь я с подозрением. Поэтому мой вопрос: есть ли способ убедиться, что виртуальная машина, на которой я работаю, действительно является виртуальной машиной сервера, не прибегая к принудительному сбою JVM? Операционная система - Ubuntu 8.04, но я использую JDK 1.6.0_14, который я скачал с сайта Sun.

Ответы [ 4 ]

11 голосов
/ 02 декабря 2009

Вы можете сделать

System.out.println(System.getProperty("java.vm.name"));

Который на моей машине возвращает либо:

Java HotSpot (TM) Клиент VM

или

Java HotSpot (TM) 64-разрядная серверная виртуальная машина

Конечно, вы не должны делать ничего критического на основе этого значения, так как оно, вероятно, изменится в будущем и будет совершенно другим на другой JVM.

9 голосов
/ 02 декабря 2009

У меня был очень похожий вопрос , который я задал на ServerFault . Я бы сказал, если вам важно, какая версия запускается, всегда используйте -client или -server.

1 голос
/ 24 июня 2010

Без написания какой-либо одной строки кода, если вы используете JConsole для подключения к вашей JVM, на вкладке «Сводка ВМ» должно быть указано, какая именно (сервер или клиент) виртуальная машина отслеживается.

Например,

Virtual Machine: OpenJDK Server VM version 1.6.0-b09

Для удаленного мониторинга вашей JVM с помощью JConsole просто включите агент JMX (Java Management Extensions), запустив JVM со следующими системными свойствами

> java.rmi.server.hostname=[your server IP/Name] // without this, on linux, jconsole will fail to connect to the remote server where JVM is running
> com.sun.management.jmxremote.authenticate=false
> com.sun.management.jmxremote.ssl=false
> com.sun.management.jmxremote.port=[portNum]
1 голос
/ 02 декабря 2009

Хорошо, если вы явно запускаете с командной строки -server, вы работаете в режиме сервера. Вы можете проверить это с помощью:

  ManagementFactory.getRuntimeMXBean().getInputArguments();

Вы можете взглянуть на RuntimeMXBean , который может открыть больше информации, но это должно быть проверено на конкретной JVM, которую вы используете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...