《java并发编程实践》作者讲述volatile关键字的时候,在书中的注脚提到了JVM的server模式和client模式。以前自己从来没有听说过这个东西,不得不感概自己知识面的狭窄,编程的世界浩瀚!于是上网上看一些别人的博客,扫个盲,这里记录下一些相关概念。
首先说下server模式和client模式的区别。Jvm有client和server两个版本,分别针对桌面应用程序和服务端应用做了相应的优化,client版本加载速度较快,server版本加载速度较慢但运行起来较快。简言之:client版本启动快,server版本运行快。由于服务器的CPU、内存和硬盘都比客户端机器强大,所以程序部署后,都应该以server模式启动,获取较好的性能。
如何查看安装的JDK,到底是client版本还是server版本呢?我们可以借助JDK_HOME/bin下的java命令,执行java -version就可以看到JVM的相关信息了。
如果我们启动java应用的时候没有显示指定server模式,还是client模式,JVM会自行根据硬件情况进行判断,具体的判断标准可以参考官方文档Server-Class Machine Detection。
下面看下server和client模式的切换。JDK的安装目录JAVA_HOME/jre/bin下,会有2个目录server与client。这个就是他们的运行环境的动态库.那么怎么切换呢?找到JAVA_HOME/jre/lib/i386/jvm.cfg,这就是JVM默认的查找顺序,用notepad++打开
-client KNOWN -server KNOWN -hotspot ALIASED_TO -client -classic WARN -native ERROR -green ERROR
由于-client在上面,所以默认是client模式启动的;如果想以server模式启动,交换-client和-server的顺序即可。