为什么在服务器模式下运行的 Java 会说版本是“混合模式”?
为什么在服务器模式下运行的 Java 会说版本是“混合模式”?当我看到这个时,是否意味着 JVM 没有真正以纯服务器模式加载?
Why does Java , running in -server mode, say that the version is "mixed-mode" ? When I see that, does it mean that the JVM didn't truly load in pure server mode?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
服务器模式并不意味着“不混合”。这些是不同的设置。
混合确实意味着 JVM 将混合编译和解释的代码。您可以选择使用开关 -Xint 切换到完全解释模式(通常您不想这样做)。
服务器模式意味着热点编译器将使用服务器设置运行。一般假设是服务器模式下的虚拟机是长时间运行的,因此优化时会考虑到这一点。
因此,如果您看到混合模式,并不表示您的虚拟机未在服务器模式下运行。
编辑:如果您想检查正在运行的内容,请尝试
至少对于 Sun VM 或 OpenJDK 的输出,这会给您一个提示。您可能会注意到,如果您使用的是 64 位系统,则始终会运行服务器 VM。
server mode does not mean "not mixed". Those are different settings.
Mixed does mean that the JVM will mix compiled and interpreted code. You could optionally switch to fully interpreted mode with the switch -Xint (usually you don't want to do this).
Server mode means that the hot-spot-compiler will run with server-settings. The general assumption is that VMs in server-mode are long-running, so optimizations will be done with this in mind.
So if you see mixed mode, that is no sign that your VM is not running in server-mode.
EDIT: If you want to check what is really running, try the output of
At least for the Sun VM or OpenJDK this will give you a hint. You might notice that you'll always run the Server VM if you are on a 64 bit system.
Hotspot 虚拟机
客户端和服务器 Hotspot 编译器都包含在 Java 运行时中环境。
默认情况下,客户端编译器处于启用状态,但对于密集的服务器端应用程序,您可以使用 -server 运行时选项运行服务器编译器。 Hotspot 虚拟机通常以混合模式运行,如 -version 输出所示。混合模式意味着当满足多个条件(包括该方法通过解释器运行的次数)时,Hotspot 会动态地将 Java 字节码编译为本机代码。混合运行时模式通常会带来最佳性能。
Hotspot Virtual Machine
Both the client and server Hotspot compilers are included in the Java Runtime Environment.
By default the client compiler is enabled, but for intense server-side applications, you can run the server compiler with the -server runtime option. The Hotspot virtual machine normally runs in a mixed mode, as seen in the -version output. Mixed mode means Hotspot dynamically compiles Java bytecodes into native code when a number of criteria have been met, including the number of times the method has been run through the interpreter. Mixed runtime mode normally results in the best performance.