概述
JVM有兩種運行模式Server與Client。兩種模式的區別在於,Client模式啟動速度較快,Server模式啟動較慢;但是啟動進入穩定期長期運行之后Server模式的程序運行速度比Client要快很多。這是因為Server模式啟動的JVM采用的是重量級的虛擬機,對程序采用了更多的優化;而Client模式啟動的JVM采用的是輕量級的虛擬機。所以Server啟動慢,但穩定后速度比Client遠遠要快。
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中,jvm.cfg位置為:JAVA_HOME/jre/lib/i386/jvm.cfg;
jvm.cfg中配置:(此時為client模式)

在64位JDK中,jvm.cfg位置為:JAVA_HOME/jre/lib/amd64/jvm.cfg。
jvm.cfg中配置:(此時為server模式)

2.2 模式切換
如果要切換啟動模式,首先要確認JDK支持哪一種或兩種模式。查看JAVA_HOME/jre/bin目錄下是否存在client或server目錄。32位的JDK一般都支持server和client兩種模式。64位的虛擬機好像只支持server模式,沒有client目錄。如下為32位JDK模式支持目錄:
切換模式只需要將client和server的聲明語句互換位置即可。如下圖所示,
紅框中為32位虛擬機中默認配置的client啟動(已被注釋掉)。藍框中為修改之后的server模式啟動。需要注意的是:在配置文件中最好不要出現空行,空行會報warning。
64位因為只支持server模式,如果我們修改了配置,啟動JVM時會報錯,無法啟動。