哪个Java热点JIT编译器正在运行?

哪个Java热点JIT编译器正在运行?,java,jit,jvm-hotspot,Java,Jit,Jvm Hotspot,我想知道我对HotSpot Java的无VM参数调用是否使用-client、-server或分层编译选项运行。当我没有提供VM参数时,默认情况下选择哪一个?是否有方法输出有关哪个JIT编译器正在运行的诊断信息?假设这是热点: -XshowSettings:vm 例如,在我的Windows box上,我得到以下输出: VM settings: Max. Heap Size (Estimated): 1.77G Ergonomics Machine Class: client

我想知道我对HotSpot Java的无VM参数调用是否使用-client、-server或分层编译选项运行。当我没有提供VM参数时,默认情况下选择哪一个?是否有方法输出有关哪个JIT编译器正在运行的诊断信息?

假设这是热点:

-XshowSettings:vm
例如,在我的Windows box上,我得到以下输出:

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

从运行的程序中,您可以查询
java.vm.name
属性来区分客户机模式和服务器模式。在hotspot上,如果您使用了该选项(例如:
JavaHotSpot(TM)64位服务器VM
),它将包含“服务器”

根据:

分层编译现在是服务器VM的默认模式


注意:它现在可以工作,但可能不是最适合未来的方法。

确定使用哪个JIT编译器的方法稍微好一点

在具有32位JDK8的Windows计算机上:

$ 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 $ 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 $java-版本 java版本“1.8.0” Java(TM)SE运行时环境(构建1.8.0-b132) Java热点(TM)客户端虚拟机(构建25.0-b70,混合模式) $java-XshowSettings-version 2>&1 | grep sun.management.compiler sun.management.compiler=热点客户端编译器 $java-server-XshowSettings-version 2>&1 | grep sun.management.compiler sun.management.compiler=热点分层编译器 因此,客户端编译器是Windows 32位JDK8的默认编译器 “-server”选项为您提供32位分层编译器

在具有64位JDK8的Windows计算机上:

$ 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 $ 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 $java-版本 java版本“1.8.0” Java(TM)SE运行时环境(构建1.8.0-b132) Java HotSpot(TM)64位服务器虚拟机(构建25.0-b70,混合模式) $java-XshowSettings-version 2>&1 | grep sun.management.compiler sun.management.compiler=热点64位分层编译器 因此,分层编译器是Windows 64位JDK8的默认编译器。
Oracle不提供64位客户端虚拟机。

谢谢Jon。我在OS X上运行Hotspot,但对于Java 1.6和1.7,该选项无法识别,唉。@JulienChastang:这很奇怪,在Windows和Linux上都可以。
java-X
显示了什么?我的坏消息。实际上,在1.6上它是无法识别的,但是在1.7上它给了我你上面提供的那种信息。奇怪的是,当我提供java-client-XshowSettings:vm时,它仍然声称自己是服务器。Charles Nutter()似乎建议,如果您使用的是64位,那么,-服务器是唯一的选择。如果能从甲骨文那里了解到这一点,那将是一件好事。