为什么运行在服务器模式下的Java会说版本是“混合模式”?

为什么运行在服务器模式下的Java会说版本是“混合模式”? 当我看到它时,是否意味着JVM没有真正加载到纯服务器模式?

服务器模式并不意味着“没有混合”。 这些是不同的设置。

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

服务器模式意味着热点编译器将与服务器设置一起运行。 一般的假设是服务器模式下的虚拟机长时间运行,因此在考虑这一点时将进行优化。

因此,如果您看到混合模式,则表明您的VM未在服务器模式下运行。

编辑:如果你想检查实际运行的是什么,请尝试输出

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

至少对于Sun VM或OpenJDK,这会给你一个提示。 您可能会注意到,如果您使用的是64位系统,则始终运行服务器VM。

热点虚拟机

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

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