1. 程式人生 > >JVM——Client模式虛擬機器與server模式虛擬機器的區別。

JVM——Client模式虛擬機器與server模式虛擬機器的區別。

目前java虛擬機器有兩種模式,分別為Client模式Server模式。這兩種模式可以使用-Client和-Server引數可以進行設定。如果沒有設定的話,怎麼辦呢?那當然難不倒虛擬機器,以它的智商當然會根據當前計算機系統環境自動選擇執行模式。

那它怎麼檢測呢?

當不指定執行模式引數時,虛擬機器啟動檢測主機是否為伺服器,如果是,則以Server模式啟動,否則以Client模式啟動(J2SE5.0檢測的根據是至少2個CPU和最低2GB記憶體)

說到這裡,也許大家都想知道自己的JVM是以什麼模式在工作呢?用以下口訣就ok!

java -version

我們可以通過執行:java -version來檢視jvm預設工作在什麼模式。來試試看:

從上圖我們可以看到,我的JVM是以Sever模式執行的。

上面說到JVM有兩種形式,為什麼我的不是以Client模式執行的呢?這兩種模式又有什麼區別呢?

它們的主要區別如下:

 

上面第二點中我們說到,Server啟動慢,不過它雖然速度較慢,但是一旦執行起來後,效能將會有很大的提升,原因是:當虛擬機器在-Client模式的時候,使用的是一個代號為C1的輕量級編譯器,而-Server模式啟動的虛擬機器採用相對重量級代號為C2的編譯器,C2比C1編譯器編譯的相對徹底,服務起來之後,效能高。

所以這兩種模式的區別可以總結為一句話:

JVM Server模式下應用啟動慢但執行速度快,JVM Client模式下應用啟動快但執行速度要慢些 

既然如此,那什麼時候用Server模式,什麼時候用Client模式呢?

  • JVM在client模式預設-Xms是1M,-Xmx是64M;JVM在Server模式預設-Xms是128M,-Xmx是1024M;
  • Server啟動慢,編譯更完全,編譯器是自適應編譯器,效率高,針對服務端應用優化在伺服器環境中最大化程式執行速度而設計;Client啟動快速,記憶體佔用少,編譯快,針對桌面應用程式優化,為在客戶端環境中減少啟動時間而優化

當JVM用於啟動GUI介面的互動應用時適合於使用client模式,當JVM用於執行伺服器後臺程式時建議用Server模式。

為什麼這樣說呢?

因為JVM 並不能預測什麼時候資料會從虛擬記憶體搬到實體記憶體或者從實體記憶體搬到虛擬記憶體,這是作業系統的事情,它不會讓應用程式知道這件事。

對於PC 機來說,如果我們頻繁地在多個程式切換,每次把程式帶到前臺視窗或退到後臺視窗都會導致 Windows 作業系統在實體記憶體和硬碟上的虛擬記憶體之間切換,這都是會影響效能的。一個常見的事情就是我們開著多個程式,並且把 Java 程式切換到最小化,另一個非 Java 程式最大化,然後我們出門吃飯 2 小時後回來把 Java 程式最大化,你會發現這個時候切換到最大化可能需要 較長的一個時間,這就是記憶體緊張時虛擬記憶體和實體記憶體間交換資料時導致 JVM 頻繁地觸發垃圾收集(GC)導致的效能問題。而這個現象在 server 模式不會出現,因為它是假設伺服器專用的,基本上沒有前臺程式,都是後臺程式。

對於普通 PC來說,工作在 client 模式就好了,特別是你的記憶體不是很大時不需要 server 模式,因為 server 模式是為伺服器準備的,它的意思就是說這個伺服器啟動之後基本上不做別的,所以可以把所有記憶體都儘量給 JVM 使用,所以才能得到一個更好的效能。
 

 

好啦,以上就是關於JVM的兩種模式的相關知識總結啦,如果大家有什麼不明白的地方或者發現文中有描述不好的地方,歡迎大家留言評論,我們一起學習呀。

 

Biu~~~~~~~~~~~~~~~~~~~~宫å´éªé¾ç«è¡¨æå|é¾ç«gifå¾è¡¨æåä¸è½½å¾ç~~~~~~~~~~~~~~~~~~~~~~pia!