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

“java-server”和“java-client”之间有实际的区别吗

我在Sun的网站上只能找到一个模糊的

“-服务器启动较慢,但应运行较快”

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

这实际上是链接到热点和默认的选项值(Java HotSpot虚拟机选项,在客户端和服务器配置之间有所不同

白皮书第2章(Java热点性能引擎体系结构(a>):

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

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

客户机VM编译器作为JDK早期版本使用的经典VM和实时(JIT)编译器的升级。客户端VM为应用程序和小程序提供了改进的运行时性能。JavaHotSpot客户机VM经过了专门调整,以减少应用程序启动时间和内存占用,使其特别适合于客户机环境。一般来说,客户机系统更适合GUI

因此,真正的区别也在编译器级别上:

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

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

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


G.Demecki指出在评论中指出,在64位版本的JDK中,-client选项多年来一直被忽略。
请参见Windowsjavacommand

-客户端

选择Java热点客户端虚拟机。
支持64位的JDK当前忽略此选项,而是使用Java Hotspot Server VM

发表评论