Какой JIT-компилятор Java HotSpot работает?

Я хотел бы знать, работает ли мой вызов HotSpot Java без аргументов виртуальной машины с параметрами -client, -server или многоуровневой компиляцией. Когда я не предоставляю аргументов виртуальной машины, какой из них выбирается по умолчанию? Есть ли способ вывести диагностику того, какой JIT-компилятор запущен?


person Julien Chastang    schedule 11.02.2013    source источник


Ответы (3)


Предполагая, что это точка доступа:

-XshowSettings:vm

Например, в моем окне Windows я получаю вывод:

VM settings:
    Max. Heap Size (Estimated): 1.77G
    Ergonomics Machine Class: client
    Using VM: Java HotSpot(TM) 64-Bit Server VM
person Jon Skeet    schedule 11.02.2013
comment
Спасибо, Джон. Я использую Hotspot в OS X, но для Java 1.6 и 1.7 эта опция, увы, не распознается. - person Julien Chastang; 11.02.2013
comment
@JulienChastang: Это странно - мне подходит как для Windows, так и для Linux. Что показывает java -X? - person Jon Skeet; 11.02.2013
comment
Виноват. На самом деле на 1.6 он не распознается, но на 1.7 он дает мне ту информацию, которую вы предоставили выше. Любопытно, что когда я предоставляю java -client -XshowSettings: vm, он по-прежнему заявляет, что это сервер. Чарльз Наттер (blog.headius.com/2009/01 /my-favorite-hotspot-jvm-flags.html), похоже, предполагает, что если вы используете 64-разрядную версию, -сервер - единственный вариант. Было бы неплохо получить разъяснения по этому поводу от Oracle. - person Julien Chastang; 11.02.2013

В запущенной программе вы можете запросить свойство java.vm.name, чтобы различать клиентский и серверный режимы. В точке доступа он будет содержать «Сервер», если вы использовали эту опцию (например: Java HotSpot(TM) 64-Bit Server VM).

Согласно этой странице:

Многоуровневая компиляция теперь является режимом по умолчанию для виртуальной машины сервера.

Примечание: сейчас он работает, но, вероятно, не является наиболее перспективным подходом.

person assylias    schedule 11.02.2013

Чуть лучший метод определения того, какой JIT-компилятор используется.

На машине Windows с 32-битным JDK8:

    $ java -version
    java version "1.8.0"
    Java(TM) SE Runtime Environment (build 1.8.0-b132)
    Java HotSpot(TM) Client VM (build 25.0-b70, mixed mode)

    $ java -XshowSettings -version 2>&1 | grep sun.management.compiler
        sun.management.compiler = HotSpot Client Compiler

    $ java -server -XshowSettings -version 2>&1 | grep sun.management.compiler
        sun.management.compiler = HotSpot Tiered Compilers

Таким образом, клиентский компилятор используется по умолчанию с 32-разрядной версией Windows JDK8, а опция «-сервер» дает вам 32-разрядный многоуровневый компилятор.

На машине Windows с 64-битной JDK8:

    $ java -version
    java version "1.8.0"
    Java(TM) SE Runtime Environment (build 1.8.0-b132)
    Java HotSpot(TM) 64-Bit Server VM (build 25.0-b70, mixed mode)

    $ java -XshowSettings -version 2>&1 | grep sun.management.compiler
        sun.management.compiler = HotSpot 64-Bit Tiered Compilers

Таким образом, многоуровневый компилятор используется по умолчанию с 64-разрядной версией Windows JDK8. Oracle не предоставляет 64-разрядную клиентскую виртуальную машину.

person user3594142    schedule 01.05.2014