JVM兩種運行模式Server與Client


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模式)

-client KNOWN-server KNOWN-hotspot ALIASED_TO -client
-classic WARN-native ERROR-green ERROR
1
2
3
4
5
6
1
2
3
4
5
6

在64位JDK中,jvm.cfg位置為:JAVA_HOME/jre/lib/amd64/jvm.cfg。 
這里寫圖片描述 
jvm.cfg中配置:(此時為server模式)

-server KNOWN-client IGNORE-hotspot ALIASED_TO -server
-classic WARN-native ERROR-green ERROR
1
2
3
4
5
6
1
2
3
4
5
6

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時會報錯,無法啟動。

性能對比

曾經有人把java與c++性能做了個對比,如圖:


圖中最顯著的就是JVM client模式和Server模式關於method call的對比,那個差別不是一般的大,在后來的測試中發現,相差至少有10倍。

下面是另外兩個對比圖:



JVM工作在Server模式可以大大提高性能,但應用的啟動會比client模式慢大概10%。當JVM用於啟動GUI界面的交互應用時適合於使用client模式,當JVM用於運行服務器后台程序時建議用Server模式。

JVM在client模式默認-Xms是1M,-Xmx是64M;JVM在Server模式默認-Xms是128M,-Xmx是1024M。





免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM