今天看java虚拟机的知识,发现sun的java虚拟机hotspot原来还分server模式和client模式两种。

就顺着搜了一下hotspot的server和client两种模式的相关知识,整理了一下,记录下来。


hotspot包括serverclient两种模式的实现:

Java HotSpot Client VM(-client),为在客户端环境中减少启动时间而优化;

Java HotSpot Server VM(-server),为在服务器环境中最大化程序执行速度而设计。

比较:Server VM启动比Client VM慢,运行比Client VM快。

server模式的运行中,垃圾回收处理做的比较好一些。


看了一下hotspot的安装的模式,32位的hotspot都是client模式;64位的都是server模式的。

那32位的虚拟机就一定是client模式,64位的虚拟机就一定是server模式吗?不是

这个是可以调整的,可以通过配置文件来永久性的调整,也可以通过启动java虚拟机时的启动参数来指定虚拟机的运行模式。


永久性修改的话,是在java 虚拟机的配置文件中修改的。

配置文件的位置:32位的虚拟机在%JAVA_HOME%/jre/lib/i386/jvm.cfg

                           64位的虚拟机在%JAVA_HOME%/jre/lib/amd64/jvm.cfg


打开32位的虚拟机对应的模式配置文件看看

# List of JVMs that can be used as an option to java, javac, etc.
# Order is important -- first in this list is the default JVM.
# NOTE that this both this file and its format are UNSUPPORTED and
# WILL GO AWAY in a future release.
#
# You may also select a JVM in an arbitrary location with the
# "-XXaltjvm=<jvm_dir>" option, but that too is unsupported
# and may not be available in a future release.
#
-client KNOWN
-server KNOWN
-hotspot ALIASED_TO -client
-classic WARN
-native ERROR
-green ERROR

看看这里面对我们有用的信息吧

第一行的模式被作为虚拟机默认的运行模式,如果想指定虚拟机按照server模式运行,那将第一行和第二行换个位置。

可以使用 "-XXaltjvm=<jvm_dir>" 选项来指定虚拟机的运行模式,但是模式仅限本次启动使用,下次不可再用。

C:\Users\zWX192672>java -version
java version "1.6.0_27"
Java(TM) SE Runtime Environment (build 1.6.0_27-b07)
Java HotSpot(TM) Client VM (build 20.2-b06, mixed mode, sharing)

C:\Users\zWX192672>java -XXaltjvm=Client -version
java version "1.6.0_27"
Java(TM) SE Runtime Environment (build 1.6.0_27-b07)
Java HotSpot(TM) Client VM (build 20.2-b06, mixed mode, sharing)

C:\Users\zWX192672>java -version
java version "1.6.0_27"
Java(TM) SE Runtime Environment (build 1.6.0_27-b07)
Java HotSpot(TM) Client VM (build 20.2-b06, mixed mode, sharing)

C:\Users\zWX192672>


64位的虚拟机配置文件中关于模式的两行为

-server KNOWN
-client IGNORE
client 模式后面对应参数为 IGNORE

再看看虚拟机的模式切换

D:\DEV_ENV\Java8_x64\jdk1.8.0_25\bin>java -version
java version "1.8.0_25"
Java(TM) SE Runtime Environment (build 1.8.0_25-b18)
Java HotSpot(TM) 64-Bit Server VM (build 25.25-b02, mixed mode)

D:\DEV_ENV\Java8_x64\jdk1.8.0_25\bin>java "-XXaltjvm=<client>" -version
Error: missing `<client>' JVM at `D:\DEV_ENV\Java8_x64\jdk1.8.0_25\jre\bin\<client>\jvm.dll'.
Please install or use the JRE or JDK that contains these missing components.

D:\DEV_ENV\Java8_x64\jdk1.8.0_25\bin>

无法通过server模式切换到client模式,说明hotspot在64位的虚拟机上面取消了client模式的服务。



Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐