Я хотел бы знать, работает ли мой вызов HotSpot Java без аргументов виртуальной машины с параметрами -client, -server или многоуровневой компиляцией. Когда я не предоставляю аргументов виртуальной машины, какой из них выбирается по умолчанию? Есть ли способ вывести диагностику того, какой JIT-компилятор запущен?
Какой JIT-компилятор Java HotSpot работает?
Ответы (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
java -X
?
- person Jon Skeet; 11.02.2013
В запущенной программе вы можете запросить свойство java.vm.name
, чтобы различать клиентский и серверный режимы. В точке доступа он будет содержать «Сервер», если вы использовали эту опцию (например: Java HotSpot(TM) 64-Bit Server VM
).
Согласно этой странице:
Многоуровневая компиляция теперь является режимом по умолчанию для виртуальной машины сервера.
Примечание: сейчас он работает, но, вероятно, не является наиболее перспективным подходом.
Чуть лучший метод определения того, какой 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-разрядную клиентскую виртуальную машину.