【发布时间】:2013-02-11 18:34:22
【问题描述】:
我想知道我对 HotSpot Java 的无 VM 参数调用是否使用 -client、-server 或分层编译选项运行。当我不提供 VM 参数时,默认选择哪一个?有没有办法输出关于哪个 JIT 编译器正在运行的诊断信息?
【问题讨论】:
标签: java jit jvm-hotspot
我想知道我对 HotSpot Java 的无 VM 参数调用是否使用 -client、-server 或分层编译选项运行。当我不提供 VM 参数时,默认选择哪一个?有没有办法输出关于哪个 JIT 编译器正在运行的诊断信息?
【问题讨论】:
标签: java jit jvm-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
【讨论】:
java -X 显示什么?
从运行的程序中,您可以查询java.vm.name 属性来区分客户端和服务器模式。如果您使用了该选项,则在热点上它将包含“服务器”(例如:Java HotSpot(TM) 64-Bit Server VM)。
根据this page:
分层编译现在是服务器 VM 的默认模式。
注意:它现在有效,但可能不是最适合未来的方法。
【讨论】:
确定正在使用哪个 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。
【讨论】: