【jvm jdk】JVM client模式和Server模式的区别

概述

JVM有两种运行模式ServerClient。两种模式的区别在于,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目录下是否存在clientserver目录。

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模式的切换

猜你喜欢

转载自blog.csdn.net/m0_45406092/article/details/108764315
今日推荐