Какой компилятор Java HotSpot JIT запущен?

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

Ответ 1

Предполагая, что это Hotspot:

-XshowSettings:vm

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

VM settings:
    Max. Heap Size (Estimated): 1.77G
    Ergonomics Machine Class: client
    Using VM: Java HotSpot(TM) 64-Bit Server VM

Ответ 2

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

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

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

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

Ответ 3

Слегка лучший способ определения, какой компилятор 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-разрядный JDK8 для Windows и опция "-сервер" предоставляет вам 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-разрядного JDK8 Windows. Oracle не предоставляет 64-разрядную клиентскую VM.