“java -server"和"java -client"之间有什么真正的实际区别吗?

我在 Sun 的网站上所能找到的只是一个模糊的信息

“-服务器启动速度较慢,但​​应该运行得更快”。

真正的区别是什么?

答案

这确实与热点 和默认值选项值Java HotSpot VM Options)这在客户端和服务器配置之间有所不同。

第2章白皮书(Java HotSpot 性能引擎架构):

JDK 包括两种类型的 VM——客户端产品和针对服务器应用程序调整的 VM。

尽管服务器和客户端虚拟机相似,但服务器虚拟机经过专门调整,可最大限度地提高峰值运行速度。

客户端 VM 编译器可作为经典 VM 和早期版本 JDK 使用的即时 (JIT) 编译器的升级。

所以真正的区别还在于编译器级别:

客户端VM编译器不会尝试执行服务器VM中的编译器执行的许多更复杂的优化,但作为交换,它需要更少的时间来分析和编译一段代码。

服务器VM包含一个高级自适应编译器,它支持通过优化C编译器执行的许多相同类型的优化,以及一些传统编译器无法完成的优化,例如跨虚拟方法调用的积极内联。

注:发布jdk6更新10 (看更新发行说明:1.6.0_10 中的更改)尝试缩短启动时间,但出于与热点选项不同的原因,使用更小的内核进行不同的打包。


G·德梅茨基指出在评论中在 64 位版本的 JDK 中,-client这个选项多年来一直被忽视。
视窗java命令

-client

选择Java热点客户端VM。
A 64-bit capable JDK currently ignores this option and instead uses the Java Hotspot Server VM


2022:霍尔格参考文献评论Javase6 /服务器级计算机检测,添加:

仅在32位Windows系统上-client曾经无条件选择。
其他系统检查了机器是否是"服务器类”,至少有2个核心和至少2GIB内存时,该机器是"服务器类"。

这解释了为什么几乎所有东西都使用-server现在已经有一段时间了。即使是您可以找到的最便宜的计算机,也是"服务器类"机器。Sun/Oracle 64版本甚至没有与客户JVM一起运送。

来自: stackoverflow.com