为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

largeQ 2019-06-23 16:00:16
“java-server”和“java-client”之间的真正区别?“java-server”和“java-client”之间有什么真正的实际区别吗?我在Sun的网站上只能找到一个模糊的“-服务器启动速度较慢,但应该运行得更快”。真正的区别是什么?(目前使用JDK 1.6.0_07。)
查看完整描述

3 回答

?
繁花不似锦

TA贡献1851条经验 获得超4个赞

这与热点和默认期权值 (Java热点VM选项)客户机和服务器配置之间的差异。

从…第二章白皮书(Java热点性能引擎体系结构):

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

虽然服务器和客户端VM是相似的,但ServerVM已经被专门调优,以最大限度地提高峰值运行速度。它旨在执行长时间运行的服务器应用程序,这些应用程序需要尽可能快的操作速度,而不是快速启动时间或更小的运行时内存占用。

客户端VM编译器既是经典VM的升级,也是JDK早期版本使用的JIT编译器的升级。客户端VM为应用程序和applet提供了更好的运行时性能。Java HotSpot客户端VM经过了特别的调整,以减少应用程序启动时间和内存占用,使其特别适合客户端环境。一般来说,客户端系统更适合GUI。

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

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

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

注:发布jdk 6更新10(见更新发布说明:1.6.0_10中的更改)试图改善启动时间,但由于与HotSpot选项不同的原因,用一个小得多的内核进行了不同的打包。


G.德米茨基指出在评论中在JDK的64位版本中,-client选项被忽略多年。
看见java命令:

-client

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


查看完整回答
反对 回复 2019-06-23
?
慕村9548890

TA贡献1884条经验 获得超4个赞

在早期版本的Java中,最明显的直接区别是分配给-client相对于-server申请。例如,在我的Linux系统上,我得到:


$ java -XX:+PrintFlagsFinal -version 2>&1 | grep -i -E 'heapsize|permsize|version'

uintx AdaptivePermSizeWeight               = 20               {product}

uintx ErgoHeapSizeLimit                    = 0                {product}

uintx InitialHeapSize                     := 66328448         {product}

uintx LargePageHeapSizeThreshold           = 134217728        {product}

uintx MaxHeapSize                         := 1063256064       {product}

uintx MaxPermSize                          = 67108864         {pd product}

uintx PermSize                             = 16777216         {pd product}

java version "1.6.0_24"

因为它默认为-server,但是带着-client我的选择是:


$ java -client -XX:+PrintFlagsFinal -version 2>&1 | grep -i -E 'heapsize|permsize|version'

uintx AdaptivePermSizeWeight               = 20               {product}

uintx ErgoHeapSizeLimit                    = 0                {product}

uintx InitialHeapSize                     := 16777216         {product}

uintx LargePageHeapSizeThreshold           = 134217728        {product}

uintx MaxHeapSize                         := 268435456        {product}

uintx MaxPermSize                          = 67108864         {pd product}

uintx PermSize                             = 12582912         {pd product}

java version "1.6.0_24"

所以-server为此,大多数内存限制和初始分配都要高得多。java版本。


然而,对于不同的体系结构、操作系统和JVM版本的组合,这些值可能会发生变化。最近版本的JVM删除了标志,并重新移动了服务器和客户机之间的许多区别。


也请记住,您可以看到运行的所有细节。jvm使用jvisualvm..如果您的用户或模块设置了JAVA_OPTS或者使用更改命令行选项的脚本。这也会让你实时监控,堆和permgen空间的使用和许多其他的统计。


查看完整回答
反对 回复 2019-06-23
  • 3 回答
  • 0 关注
  • 2188 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号