JVM的server模式和client模式

最近在看关于java并发编程的一本书,书中提及到了虚拟机的server和client模式。不是很理解,于是上网扫盲,总结如下:
Jvm有client和server两个版本,分别针对桌面应用程序和服务端应用做了相应的优化,client版本加载速度较快,server版本加载速度较慢但运行起来较快。简言之:client版本启动快,server版本运行快。由于服务器的CPU、内存和硬盘都比客户端机器强大,所以程序部署后,都应该以server模式启动,获取较好的性能。
我们可以通过运行:java -version来查看jvm默认工作在什么模式。(这个命令以前经常用,但是只是拿来看看java版本,没注意到还藏有jvm模式的信息,)我现在用的是win7系统,结果如下:
C:\Users\Administrator>java -version
java version "1.6.0_12"
Java(TM) SE Runtime Environment (build 1.6.0_12-b04)
Java HotSpot(TM) Client VM (build 11.2-b01, mixed mode, sharing)
可以看到,window下默认的是client模式,linux下默认是server模式,大家可以试试。
如果你想在window下以server模式运行,在运行java类时加-server参数或者直接修改jvm配置文件。32位的虚拟机配置在目录JAVA_HOME/jre/lib/i386/jvm.cfg,64位的在JAVA_HOME/jre/lib/amd64/jvm.cfg, 目前64位只支持server模式,  配置内容大致如下:
-client KNOWN
-server KNOWN
-hotspot ALIASED_TO -client
-classic WARN
-native ERROR
-green ERROR
一般只要变更 -server KNOWN 与 -client KNOWN 两个配置位置先后顺序即可,前提是JAVA_HOME/jre/bin 目录下同时存在 server 与client两个文件夹,分别对应着各自的jvm.
至于为什么两种模式会有这种差异,虽然不管是哪种模式,共用的都是一套解释器,按理说纯解释执行的性能应该一样。但是解释器虽然是同一个,但它却可以根据启动参数的不同而变得不同。而且有很多因素会影响,解释器自身的性能是一点,VM里其它部分的情况又是一点,例如说GC。
这些还是等到后面系统学习java虚拟机在总结吧,回到并发。。。

猜你喜欢

转载自waitgod.iteye.com/blog/2235734