Java -server标志并编译

时间:2012-09-07 07:53:51

标签: java compilation

this article中声明:

  

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

     

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

     

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

     

客户端VM编译器用作旧版本JDK使用的Classic VM和实时(JIT)编译器的升级。客户端VM为应用程序和小程序提供了改进的运行时性能。 Java HotSpot客户端VM经过专门调整,可缩短应用程序启动时间和内存占用,使其特别适合客户端环境。通常,客户端系统更适合GUI。

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

2 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:1)

重要的是要注意Java是“Compile Once,Run Everywhere”

这意味着您无需担心

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

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