4

这篇文章中指出:

JDK 包括两种类型的 VM——客户端产品和针对服务器应用程序调整的 VM。这两个解决方案共享 Java HotSpot 运行时环境代码库,但使用适合客户端和服务器明显独特的性能特征的不同编译器。这些差异包括编译内联策略和堆默认值。

JDK 在发行版中包含这两个系统,因此开发人员可以通过指定 -client 或 -server 来选择他们想要的系统。

尽管服务器虚拟机和客户端虚拟机相似,但服务器虚拟机已经过专门调整,以最大限度地提高峰值运行速度。它旨在执行长时间运行的服务器应用程序,这些应用程序需要尽可能快的运行速度,而不是快速启动时间或更小的运行时内存占用。

客户端 VM 编译器用作经典 VM 和早期版本 JDK 使用的即时 (JIT) 编译器的升级。客户端 VM 为应用程序和小程序提供了改进的运行时性能。Java HotSpot 客户端 VM 经过专门调整,可减少应用程序启动时间和内存占用,使其特别适合客户端环境。一般来说,客户端系统更适合 GUI。

这是否意味着如果要运行带有-server标志的应用程序,必须以某种模式编译才能使其正常工作?

4

2 回答 2

6

不,这是运行时设置。您的应用程序的字节码是相同的。启动 JVM 时使用此标志。

混淆可能来自“编译”也发生在运行时这一事实,因为 JVM 将 Java 字节码 JIT(即时)编译为本机机器代码(以及如何完成受此标志的影响) .

于 2012-09-07T07:55:09.950 回答
2

需要注意的是,Java 是“一次编译,到处运行”

这意味着您无需担心

  • 它将在客户端还是服务器上运行
  • 无论是 32 位还是 64 位
  • 使用 32 位还是 64 位引用。
  • 使用什么 CPU
  • 使用什么操作系统
  • 使用什么属性,即没有宏。
  • 调试日志是否打开。
  • 使用了多少内存。
  • 使用什么代码检测。
  • 您正在运行哪个版本的 java(如果它是更高版本)

这些都是在运行时确定的,而不是编译时。

于 2012-09-07T07:56:39.200 回答