JVM的Client模式与Server模式

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

 

概述

JVM有两种运行模式Server与Client。两种模式的区别在于,Client模式启动速度较快,Server模式启动较慢;但是启动进入稳定期长期运行之后Server模式的程序运行速度比Client要快很多。这是因为Server模式启动的JVM采用的是重量级的虚拟机,对程序采用了更多的优化;而Client模式启动的JVM采用的是轻量级的虚拟机。所以Server启动慢,但稳定后速度比Client远远要快。

-------------------------------------------------------------------------------------------------------------

更多区别

当前64位只支持server模式
Server VM启动比Client VM慢大概10%,运行比Client VM快至少有10倍;
由于服务器的CPU、内存和硬盘都比客户端机器强大,所以程序部署后,都应该以server模式启动,获取较好的性能;
JVM在client模式默认-Xms是1M,-Xmx是64M;JVM在Server模式默认-Xms是128M,-Xmx是1024M;
server:启动慢,编译更完全,编译器是自适应编译器,效率高,针对服务端应用优化,在服务器环境中最大化程序执行速度而设计。
client:快速启动,内存占用少,编译快,针对桌面应用程序优化,为在客户端环境中减少启动时间而优化;

关于GC:


clien模式下,新生代选择的是串行gc,旧生代选择的是串行gc
server模式下,新生代选择的是并行回收gc,旧生代选择的是并行gc
一般来说我们系统应用选择有两种方式:吞吐量优先和暂停时间优先,对于吞吐量优先的采用server默认的并行gc方式,对于暂停时间优先的选用并发gc(CMS)方式。

1. 当前是Client or Server?

使用Java -version命令就能显示出当前虚拟机处于哪种模式。 
Client: 
如下图所示,可以看到HotSpot虚拟机采用Client模式启动的。 
JVM的Client模式与Server模式_第1张图片

Server: 
如下图所示,可以看到HotSpot虚拟机采用Server模式启动的。另外我们也能看到该虚拟机是64位的。如果像上面的Client图中那样不显示位数,则是32位虚拟机。所以使用java -version也能查看虚拟机是32位还是64位。 
JVM的Client模式与Server模式_第2张图片

2. Client与Server切换

2.1 模式配置文件

JVM启动时采用何种模式是在名为jvm.cfg的配置文件中配置的。 
在32位JDK中,jvm.cfg位置为:JAVA_HOME/jre/lib/i386/jvm.cfg; 
JVM的Client模式与Server模式_第3张图片 
jvm.cfg中配置:(此时为client模式)

JVM的Client模式与Server模式_第4张图片

 

 

在64位JDK中,jvm.cfg位置为:JAVA_HOME/jre/lib/amd64/jvm.cfg。 
JVM的Client模式与Server模式_第5张图片 
jvm.cfg中配置:(此时为server模式)

 

2.2 模式切换

如果要切换启动模式,首先要确认JDK支持哪一种或两种模式。查看JAVA_HOME/jre/bin目录下是否存在client或server目录。32位的JDK一般都支持server和client两种模式。64位的虚拟机好像只支持server模式,没有client目录。如下为32位JDK模式支持目录: 
JVM的Client模式与Server模式_第6张图片

切换模式只需要将client和server的声明语句互换位置即可。如下图所示, 
红框中为32位虚拟机中默认配置的client启动(已被注释掉)。蓝框中为修改之后的server模式启动。需要注意的是:在配置文件中最好不要出现空行,空行会报warning。 
JVM的Client模式与Server模式_第7张图片

64位因为只支持server模式,如果我们修改了配置,启动JVM时会报错,无法启动。

转载于:https://my.oschina.net/idea813/blog/1611771

你可能感兴趣的:(JVM的Client模式与Server模式)