"java-server"和"java-client"之间有什么实际的区别吗?
我在Sun的网站上能找到的只是一个模糊的
"-服务器启动较慢,但应运行较快".
真正的区别是什么?(目前正在使用JDK 1.6.0_07.)
"java-server"和"java-client"之间有什么实际的区别吗?
我在Sun的网站上能找到的只是一个模糊的
"-服务器启动较慢,但应运行较快".
真正的区别是什么?(目前正在使用JDK 1.6.0_07.)
这实际上与HotSpot和默认的option values(Java HotSpot VM Options)相关联,它们在客户端和服务器配置之间有所不同.
从白皮书(The Java HotSpot Performance Engine Architecture)的第Chapter 2页开始:
JDK包括两种风格的VM--客户端产品和针对服务器应用程序调优的VM.这两个解决方案共享Java HotSpot运行时环境代码库,但使用不同的编译器,以适应客户机和服务器独特的性能特征.这些差异包括编译内联策略和堆默认值.
虽然服务器和客户端虚拟机相似,但服务器虚拟机已经过专门调整,以最大限度地提高峰值运行速度.它旨在执行长时间运行的服务器应用程序,这些应用程序需要尽可能快的操作速度,而不是快速启动时间或较小的运行时内存占用.
客户机VM编译器可作为JDK早期版本使用的classic VM和即时(JIT)编译器的升级.客户端VM为应用程序和小程序提供了改进的运行时性能.Java HotSpot客户端VM经过了特别调整,以减少应用程序启动时间和内存占用,使其特别适合客户端环境.一般来说,客户机系统更适合GUI.
因此,真正的区别还在于编译器级别:
客户端VM编译器不会try 执行编译器在服务器VM中执行的许多更复杂的优化,但作为交换,它需要更少的时间来分析和编译一段代码.这意味着客户端虚拟机可以更快地启动,并且需要更小的内存占用.
服务器VM包含一个高级自适应编译器,它支持通过优化C++编译器执行的许多相同类型的优化,以及一些传统编译器无法完成的优化,例如在虚拟方法调用中的积极内联.这是相对于静态编译器的竞争优势和性能优势.自适应优化技术在方法上非常灵活,通常甚至优于高级静态分析和编译技术.
注意:jdk6 update 10的发行版(见Update Release Notes:Changes in 1.6.0_10)试图缩短启动时间,但原因与热点选项不同,它的内核要小得多.
G. Demecki points out in the comments that in 64-bit versions of JDK, the -client
option is ignored for many years.
See Windows java
command:
-client
Selects the Java HotSpot Client VM.
A 64-bit capable JDK currently ignores this option and instead uses the Java Hotspot Server VM.
2022年:the comments和JavaSE6 / Server-Class Machine Detection中的Holger个参考文献,增加:
Only on 32 bit Windows systems,
-client
was ever chosen unconditionally.
Other systems checked whether the machine was “server class” which was fulfilled when having at least 2 cores and at least 2GiB of memory.这就解释了为什么现在几乎所有东西都使用
-server
已经有很长一段时间了.即使是你能找到的最便宜的计算机,也是"服务器级"的计算机.Sun/Oracle64版本甚至没有附带客户端JVM.