为什么在-server模式下运行的Java说该版本是“混合模式”?

2022-09-01 18:46:35

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


答案 1

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

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

服务器模式意味着热点编译器将使用服务器设置运行。一般假设是,处于服务器模式的 VM 长时间运行,因此在进行优化时将牢记这一点。

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

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

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

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


答案 2

热点虚拟机

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

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


推荐