11

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

4

3 回答 3

5

假设这是热点:

-XshowSettings:vm

例如,在我的 Windows 机器上,我得到以下输出:

VM settings:
    Max. Heap Size (Estimated): 1.77G
    Ergonomics Machine Class: client
    Using VM: Java HotSpot(TM) 64-Bit Server VM
于 2013-02-11T18:39:02.333 回答
2

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

根据此页面

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

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

于 2013-02-11T18:39:44.577 回答
1

确定正在使用哪个 JIT 编译器的更好的方法。

在具有 32 位 JDK8 的 Windows 机器上:

    $ java -版本
    java版本“1.8.0”
    Java(TM) SE 运行时环境 (build 1.8.0-b132)
    Java HotSpot(TM) 客户端虚拟机(build 25.0-b70,混合模式)

    $ java -XshowSettings -版本 2>&1 | grep sun.management.compiler
        sun.management.compiler = HotSpot 客户端编译器

    $ java -server -XshowSettings -版本 2>&1 | grep sun.management.compiler
        sun.management.compiler = HotSpot 分层编译器

因此,客户端编译器是 Windows 32 位 JDK8 的默认值,而“-server”选项为您提供 32 位分层编译器。

在具有 64 位 JDK8 的 Windows 机器上:

    $ java -版本
    java版本“1.8.0”
    Java(TM) SE 运行时环境 (build 1.8.0-b132)
    Java HotSpot(TM) 64 位服务器 VM(内部版本 25.0-b70,混合模式)

    $ java -XshowSettings -版本 2>&1 | grep sun.management.compiler
        sun.management.compiler = HotSpot 64 位分层编译器

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

于 2014-05-01T20:33:30.070 回答