为什么Java在-server模式下运行时,会显示版本为“混合模式”?当我看到这个信息,是不是意味着JVM没有真正以纯服务器模式加载?
为什么Java在-server模式下运行时,会显示版本为“混合模式”?当我看到这个信息,是不是意味着JVM没有真正以纯服务器模式加载?
服务器模式并不代表"不混合"。这些是不同的设置。
"混合模式"意味着JVM将编译和解释代码混合使用。你可以选择使用开关 -Xint 切换到完全解释模式(通常你不会想这么做)。
服务器模式意味着热点编译器将以服务器设置运行。一般认为运行在服务器模式的虚拟机是长时间运行的,因此优化也会考虑这一点。
所以,如果你看到混合模式,并不意味着你的虚拟机没有运行在服务器模式下。
编辑:如果你想检查正在运行什么,请尝试输出
System.out.println(System.getProperty("java.vm.name"));
System.out.println(System.getProperty("java.vm.info"));
至少对于Sun虚拟机或OpenJDK来说,这会给你一些提示。如果你在64位系统上运行,你可能会注意到你总是会运行Server VM。
Java运行环境中包含客户端和服务器端的Hotspot编译器。
默认情况下,启用客户端编译器,但对于需要强大的服务器端应用程序,可以使用-server运行时选项运行服务器编译器。 Hotspot虚拟机通常以混合模式运行,如-version输出所示。混合模式意味着Hotspot在满足一定条件后(包括方法已通过解释器运行的次数)动态将Java字节码编译成本地代码。混合运行时模式通常会产生最佳性能。