为什么运行在服务器模式下的Java会说版本是“混合模式”?当我看到它时,是否意味着JVM没有真正加载到纯服务器模式?
答案 0 :(得分:32)
服务器模式并不意味着“没有混合”。这些是不同的设置。
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。
答案 1 :(得分:7)
客户端和服务器Hotspot编译器都包含在Java运行时环境中。
默认情况下,客户端编译器已启用,但对于密集型服务器端应用程序,可以使用-server运行时选项运行服务器编译器。 Hotspot虚拟机通常以混合模式运行,如-version输出中所示。混合模式意味着当满足许多条件时,Hotspot会动态地将Java字节码编译为本机代码,包括方法通过解释器运行的次数。混合运行时模式通常会产生最佳性能。