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