为什么在-server模式下运行的Java会显示版本为“混合模式”?

28

为什么Java在-server模式下运行时,会显示版本为“混合模式”?当我看到这个信息,是不是意味着JVM没有真正以纯服务器模式加载?


2
你可能也想阅读这篇文章:https://dev59.com/Q3VC5IYBdhLWcg3wvT1a - biziclop
2个回答

38

服务器模式并不代表"不混合"。这些是不同的设置。

"混合模式"意味着JVM将编译和解释代码混合使用。你可以选择使用开关 -Xint 切换到完全解释模式(通常你不会想这么做)。

服务器模式意味着热点编译器将以服务器设置运行。一般认为运行在服务器模式的虚拟机是长时间运行的,因此优化也会考虑这一点。

所以,如果你看到混合模式,并不意味着你的虚拟机没有运行在服务器模式下。

编辑:如果你想检查正在运行什么,请尝试输出

System.out.println(System.getProperty("java.vm.name"));
System.out.println(System.getProperty("java.vm.info"));

至少对于Sun虚拟机或OpenJDK来说,这会给你一些提示。如果你在64位系统上运行,你可能会注意到你总是会运行Server VM。


2
-Xcomp是用于编译模式。你不想这样做。顺便说一下,Server HotSpot有自己的解释器(它需要分析信息,这使得它比普通解释器慢一些)。 - Tom Hawtin - tackline

10

Hotspot虚拟机

Java运行环境中包含客户端和服务器端的Hotspot编译器。

默认情况下,启用客户端编译器,但对于需要强大的服务器端应用程序,可以使用-server运行时选项运行服务器编译器。 Hotspot虚拟机通常以混合模式运行,如-version输出所示。混合模式意味着Hotspot在满足一定条件后(包括方法已通过解释器运行的次数)动态将Java字节码编译成本地代码。混合运行时模式通常会产生最佳性能。


2
这实际上意味着-server选项禁用了混合模式。该文章来自2000年,因此可能也不是非常准确。 - extraneon
混合模式不一定表示服务器模式。 - Sajuuk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接