“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一起运送。