JVM client模式和Server模式的区别

在“你知道自己执行的是哪个jre吗?”一文中我们知道安装JDK时会安装了两套JRE:专用和公用,殊不知这两套JRE还有秘密。

专用和公用JRE的不同

不同点在于专用JRE的bin里不仅有“client”目录,还有“server”目录,而公用的只有"client"目录。其实client和server是Java运行的两种模式,那么它们有什么区别呢?

JVM client模式和Server模式启动,分别针对桌面应用和服务器应用做了相应的优化,client版本加载速度较快,server版本加载速度较慢但运行起来较快。。

Java HotSpot虚拟机默认不带参数启动会首先检测主机是否为服务器,如果是,则以Server模式启动,否则以client模式启动,而检测的根据是至少2个CPU和最低2GB内存。

查看你的虚拟机版本与模式

java -version //查看JVM默认的环境
java -client -version //查看JVM的客户端环境,针对GUI优化,启动速度快,运行速度不如server
java -server -version //查看JVM的服务器端环境,针对生产环境优化,运行速度快,启动速度慢

如图:

JVM client模式和Server模式的区别

可以看得出使用的是HotSpot虚拟机,使用的是Client模式。


虚拟机模式切换

如果只是临时切换,可以直接使用命令行执行,格式如:

java -模式(client或server) classname

如果永久切换可以修改配置文件,配置文件在“JAVA_HOME/jre/lib/i386/jvm.cfg”,我们可以看到JVM默认的顺序:

-client KNOWN
-server KNOWN
-hotspot ALIASED_TO -client
-classic WARN
-native ERROR
-green ERROR

只需要把-server和-clent调换顺序即可:

-server KNOWN
-client KNOWN
-hotspot ALIASED_TO -client
-classic WARN
-native ERROR
-green ERROR

性能对比

曾经有人把java与c++性能做了个对比,如图:

JVM client模式和Server模式的区别

图中最显著的就是JVM client模式和Server模式关于method call的对比,那个差别不是一般的大,在后来的测试中发现,相差至少有10倍。

下面是另外两个对比图:

JVM client模式和Server模式的区别

JVM client模式和Server模式的区别

JVM工作在Server模式可以大大提高性能,但应用的启动会比client模式慢大概10%。当JVM用于启动GUI界面的交互应用时适合于使用client模式,当JVM用于运行服务器后台程序时建议用Server模式。

JVM在client模式默认-Xms是1M,-Xmx是64M;JVM在Server模式默认-Xms是128M,-Xmx是1024M。

上一篇:ThreadLocal ——android消息机制handler在非主线程创建not called Looper.prepare() 错误的原因


下一篇:WPF 自定义CheckBox样式