文章目录
- 概述
- 1. 当前是Client or Server?
- Client
- Server
- 2. Client与Server切换
- 2.1 模式配置文件
- 32位JDK
- 64位JDK
- 2.2 模式切换
概述
JVM有两种运行模式Server
与Client
。两种模式的区别在于,Client模式启动速度较快,Server模式启动较慢;但是启动进入稳定期长期运行之后Server模式的程序运行速度比Client要快很多。这是因为Server模式启动的JVM采用的是重量级的虚拟机,对程序采用了更多的优化;而Client模式启动的JVM采用的是轻量级的虚拟机。所以Server启动慢,但稳定后速度比Client远远要快。
所以通常用于做服务器的时候我们用服务端模式,如果你的电脑只是运行一下java程序,就客户端模式就可以了。当然这些都是我们做程序优化程序才需要这些东西的,普通人并不关注这些专业的东西了。其实服务器模式即使编译更彻底,然后垃圾回收优化更好,这当然吃的内存要多点相对于客户端模式。
1. 当前是Client or Server?
使用Java -version
命令就能显示出当前虚拟机处于哪种模式。
Client
如下图所示,可以看到HotSpot虚拟机采用Client
模式启动的。
Server
如下图所示,可以看到HotSpot虚拟机采用Server模式启动的。另外我们也能看到该虚拟机是64位
的。如果像上面的Client图中那样不显示位数,则是32位虚拟机。所以使用java -version也能查看虚拟机是32位还是64位。
2. Client与Server切换
2.1 模式配置文件
JVM启动时采用何种模式是在名为jvm.cfg的配置文件中配置的。
32位JDK
在32位JDK中,jvm.cfg位置为:JAVA_HOME/jre/lib/i386/jvm.cfg
;
jdk1.6.0_43 /jre/lib/i386/jvm.cfg中配置:(此时为client模式)
-client KNOWN //KNOWN 说明支持client 模式
-server KNOWN //KNOWN 说明支持server 模式
-hotspot ALIASED_TO -client //和模式无关,即使切换模式,也可以一直不变
-classic WARN
-native ERROR
-green ERROR
64位JDK
在64位JDK中,jvm.cfg位置为:JAVA_HOME/jre/lib/amd64/jvm.cfg
-client KNOWN
-server IGNORE //不支持server
-hotspot ALIASED_TO -server
-classic WARN
-native ERROR
-green ERROR
2.2 模式切换
如果要切换启动模式,首先要确认JDK支持哪一种或两种模式
。查看JAVA_HOME/jre/bin
目录下是否存在client
或server
目录。
32位的JDK一般都支持server和client两种模式。64位的虚拟机好像只支持server模式,没有client目录。如下为32位JDK模式支持目录:
根据支持的模式,修改出现的顺序
即可
server模式 :
-server KNOWN
-client KNOWN
client模式:
-client KNOWN
-server KNOWN
修改jvm.cfg如果没有生效,可能与环境有关系,尤其本地有多个版本情况下,可以参考 切换jdk版本不成功解决,大致原因可能是jvm.cfg被多版本污染了,清理完后再试试
64位因为只支持server模式,如果我们修改了配置为client模式,启动JVM时会报错,无法启动。
注意:配置过程中不能存在空行,否则将报错,但是配置文件的最后一行需要留一行空白,否则也会报错
下面是我的一些报错信息:
Warning: No leading - on line 32 of `D:\Program Files (x86)\Java\jdk1.7.0_72\jre\lib\i386\jvm.cfg'
Warning: Missing VM type on line 32 of `D:\Program Files (x86)\Java\jdk1.7.0_72\jre\lib\i386\jvm.cfg'
Warning: No leading - on line 37 of `D:\Program Files (x86)\Java\jdk1.7.0_72\jre\lib\i386\jvm.cfg'
Warning: Missing VM type on line 37 of `D:\Program Files (x86)\Java\jdk1.7.0_72\jre\lib\i386\jvm.cfg'
Warning: Unknown VM type on line 44 of `D:\Program Files (x86)\Java\jdk1.7.0_72\jre\lib\i386\jvm.cfg'
参考 JVM client模式和Server模式的区别
关于JDK的Server和Client模式的切换