一尘不染

“ java -server”和“ java -client”之间的真正区别?

java

“ java -server”和“ java -client”之间是否有实际的实际区别?

我在Sun网站上所能找到的一切都是模糊的

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

真正的区别是什么?(当前使用JDK 1.6.0_07。)


阅读 732

收藏
2020-02-28

共1个答案

一尘不染

这实际上与HotSpot和默认选项值(Java HotSpot VM Options)链接在一起,这些默认值在客户端和服务器配置之间有所不同。

从白皮书的第2章(Java HotSpot性能引擎体系结构)开始:

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

尽管服务器VM和客户端VM相似,但已经对服务器VM进行了特殊调整,以最大程度地提高峰值运行速度。它用于执行长时间运行的服务器应用程序,这些应用程序需要比快速启动时间或较小的运行时内存占用更多​​的最快的运行速度。

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

因此,真正的区别还在于编译器级别:

客户端VM编译器不会尝试执行由服务器VM中的编译器执行的许多更复杂的优化,但是作为交换,它需要更少的时间来分析和编译一段代码。这意味着客户端VM可以更快地启动,并且需要较小的内存空间。

Server VM包含一个高级自适应编译器,该编译器支持通过优化C ++编译器执行的许多相同类型的优化,以及一些传统编译器无法完成的优化,例如跨虚拟方法调用的主动内联。与静态编译器相比,这是一个竞争优势和性能优势。自适应优化技术的方法非常灵活,通常甚至优于高级静态分析和编译技术。

2020-02-28