Почему Java, работающая в режиме -server, говорит, что версия «смешанный режим»? - PullRequest
21 голосов
/ 03 февраля 2011

Почему Java, работающая в режиме -server, говорит, что версия "смешанный режим"? Когда я вижу это, означает ли это, что JVM действительно не загружается в режиме чистого сервера?

Ответы [ 2 ]

32 голосов
/ 03 февраля 2011

режим сервера не означает «не смешанный».Это разные настройки.

Смешанный означает, что JVM будет смешивать скомпилированный и интерпретированный код.При желании вы можете переключиться в полностью интерпретируемый режим с помощью ключа -Xint (обычно вы этого не хотите).

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

Так что, если вы видите смешанный режим, это не означает, что ваша виртуальная машина не работает на сервере.-mode.

РЕДАКТИРОВАТЬ: Если вы хотите проверить, что действительно работает, попробуйте вывод

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

По крайней мере для Sun VM или OpenJDK это даст вам подсказку.Вы можете заметить, что вы всегда будете запускать серверную виртуальную машину, если вы работаете в 64-битной системе.

7 голосов
/ 03 февраля 2011

Виртуальная машина Hotspot

В среду выполнения Java включены как клиентские, так и серверные компиляторы Hotspot.

По умолчанию клиентский компилятор включен, но для интенсивногосерверные приложения, вы можете запустить серверный компилятор с опцией -server runtime. Виртуальная машина Hotspot обычно работает в смешанном режиме, как показано в -version.Смешанный режим означает, что Hotspot динамически компилирует Java-байт-коды в собственный код, когда выполняется ряд критериев, в том числе количество раз, которое метод выполнялся через интерпретатор.Смешанный режим выполнения обычно дает наилучшую производительность.

...