3 回答

TA贡献1851条经验 获得超4个赞
JDK包括两种版本的VM-客户端产品和为服务器应用程序优化的VM。这两种解决方案共享Java HotSpot运行时环境代码库,但使用不同的编译器,这些编译器适合于客户端和服务器明显独特的性能特性。这些差异包括编译内联策略和堆默认值。
虽然服务器和客户端VM是相似的,但ServerVM已经被专门调优,以最大限度地提高峰值运行速度。它旨在执行长时间运行的服务器应用程序,这些应用程序需要尽可能快的操作速度,而不是快速启动时间或更小的运行时内存占用。
客户端VM编译器既是经典VM的升级,也是JDK早期版本使用的JIT编译器的升级。客户端VM为应用程序和applet提供了更好的运行时性能。Java HotSpot客户端VM经过了特别的调整,以减少应用程序启动时间和内存占用,使其特别适合客户端环境。一般来说,客户端系统更适合GUI。
客户机VM编译器不尝试执行编译器在ServerVM中执行的许多更复杂的优化,但作为交换,分析和编译一段代码所需的时间更少。这意味着客户机VM可以更快地启动,并且需要更小的内存占用。
Server VM包含一个高级自适应编译器,它支持通过优化C+编译器执行的许多相同类型的优化,以及一些传统编译器无法完成的优化,例如跨虚拟方法调用的积极内联。与静态编译器相比,这是一种竞争优势和性能优势。自适应优化技术在方法上是非常灵活的,并且通常优于先进的静态分析和编译技术。
-client
java
-client
选择Java热点客户端VM。
支持64位的JDK当前忽略此选项,而是使用Java HotSpot Server VM.

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空间的使用和许多其他的统计。
添加回答
举报