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

时间:2013-02-11 18:34:23

标签: java jit jvm-hotspot

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

3 个答案:

答案 0 :(得分:5)

假设这是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

答案 1 :(得分:2)

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

根据this page

  

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

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

答案 2 :(得分:0)

确定使用哪个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

因此,客户端编译器是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) 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

因此,分层编译器是Windows 64位JDK8的默认编译器。 Oracle不提供64位客户端VM。