摘要:今天開始實戰虛擬機之二虛擬機的工作模式。總計有個系列實戰虛擬機之一堆溢出處理實戰虛擬機之二虛擬機的工作模式實戰虛擬機之三的新生代實戰虛擬機之四禁用實戰虛擬機之五開啟編譯目前的虛擬機支持和兩種運行模式。
今天開始實戰Java虛擬機之二:“虛擬機的工作模式”。
總計有5個系列
實戰Java虛擬機之一“堆溢出處理”
實戰Java虛擬機之二“虛擬機的工作模式”
實戰Java虛擬機之三“G1的新生代GC”
實戰Java虛擬機之四“禁用System.gc()”
實戰Java虛擬機之五“開啟JIT編譯”
目前的Java虛擬機支持Client和Server兩種運行模式。使用參數-client可以指定使用Client模式,使用參數-server可以指定使用Server模式。默認情況下,虛擬機會根據當前計算機系統環境自動選擇運行模式。使用-version參數可以查看當前的模式,如下所示:
./java -version java version "1.7.0_40" Java(TM) SE Runtime Environment (build1.7.0_40-b43) Java HotSpot(TM) Client VM (build 24.0-b56, mixed mode, sharing)
使用-server參數后,就可以得到如下輸出:
./java -server -version java version "1.7.0_40" Java(TM) SE Runtime Environment (build1.7.0_40-b43) Java HotSpot(TM) Server VM (build 24.0-b56, mixed mode)
與Client模式相比,Server模式的啟動比較慢,因為Server模式會嘗試收集更多的系統性能信息,使用更復雜的優化算法對程序進行優化。因此,當系統完全啟動并進入運行穩定期后,Server模式的執行速度會遠遠快于Client模式。所以,對于后臺長期運行的系統,使用-server參數啟動對系統的整體性能可以有不小的幫助。但對于用戶界面程序,運行時間不長,又追求啟動速度,Client模式也是不錯的選擇。
從發展趨勢上看,未來64位系統必然會逐步取代32位系統,而在64位系統中虛擬機更傾向于Server模式運行。
虛擬機在Server模式和Client模式下的各種參數可能會有很大不同,讀者如果需要查看給定參數的默認值,可以使用-XX:+PrintFlagsFinal參數。這里以JIT編譯閾值和最大堆為例,展示Client模式和Server模式下兩者的區別。
對于Client模式,參數如下:
./java -XX:+PrintFlagsFinal -client -version |grep -E " CompileThreshold| MaxHeapSize" intx CompileThreshold = 1500 {pd product} uintx MaxHeapSize := 268435456 {product} java version "1.7.0_40" Java(TM) SE Runtime Environment (build1.7.0_40-b43) Java HotSpot(TM) Client VM (build 24.0-b56, mixedmode, sharing)
對于Server模式,參數如下:
./java -XX:+PrintFlagsFinal -server -version |grep -E " CompileThreshold| MaxHeapSize" intx CompileThreshold = 10000 {pd product} uintx MaxHeapSize :=1073741824 {product} java version "1.7.0_40" Java(TM) SE Runtime Environment (build1.7.0_40-b43) Java HotSpot(TM) Server VM (build 24.0-b56, mixedmode)
可以看到,在Client模式下,CompileThreshold默認值為1500,即函數被調用1500次后,會進行JIT編譯(有關JIT編譯的更多細節請參閱《實戰Java虛擬機-jvm故障診斷與性能優化》第11章)。而在Server模式下,這個數值為10000。因此,Server模式下系統更有可能解釋執行。而一旦進行編譯,Server模式的優化效果會好于Client模式。其次,對于系統最大堆,在Client模式下為約256M,而在Server模式下約為1G。對于其他參數,讀者可以使用類似的方式進行查找比較。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/64327.html
摘要:今天開始實戰虛擬機之三的新生代。一旦區被占滿,新生代就會啟動。新生代收集前后的堆數據如圖所示,其中表示區,表示區,表示老年代。當然我們最為關心的依然是的停頓時間以及回收情況。節選自實戰虛擬機一書交流群 今天開始實戰Java虛擬機之三:G1的新生代GC。 總計有5個系列實戰Java虛擬機之一堆溢出處理實戰Java虛擬機之二虛擬機的工作模式實戰Java虛擬機之三G1的新生代GC實戰Java...
摘要:如下文字顯示了典型的堆內存溢出一旦發生這類問題,系統就會被迫退出。有關等工具的使用,可以參閱實戰虛擬機故障診斷與性能優化第章。除了在發生時可以導出堆信息外,虛擬機還允許在發生錯誤時執行一個腳本文件。 從今天開始,我會發5個關于java虛擬機的小系列:實戰Java虛擬機之一堆溢出處理 [實戰Java虛擬機之二虛擬機的工作模式][2] [實戰Java虛擬機之三G1的新生代GC][3] 實戰...
摘要:監控和故障處理工具顯示指定系統內所有的虛擬機進程用于收集虛擬機各方面的運行數據。的常用功能選項測試上面輸出了我正在運行程序的包名下的類名虛擬機統計信息監視工具使用于監視虛擬機各種運行狀態信息的命令行工具。 《深入理解Java虛擬機:JVM高級特性與最佳實踐(第二版》讀書筆記與常見面試題總結 本節常見面試題(推薦帶著問題閱讀,問題答案在文中都有提到): JVM調優的常見命令行工具有哪些?...
摘要:運行時數據區域虛擬機在執行程序的過程中會把它管理的內存劃分成若干個不同的數據區域。堆虛擬機所管理的內存中最大的一塊,堆是所有線程共享的一塊內存區域,在虛擬機啟動時創建。 《深入理解Java虛擬機:JVM高級特性與最佳實踐(第二版》讀書筆記 1 概述 對于Java程序員來說,在虛擬機自動內存管理機制下,不再需要像C/C++程序開發程序員這樣為內一個new 操作去寫對應的delete/...
摘要:深入理解虛擬機高級特性與最佳實踐第二版讀書筆記與常見面試題總結本節常見面試題介紹下內存區域運行時數據區。運行時數據區域虛擬機在執行程序的過程中會把它管理的內存劃分成若干個不同的數據區域。 《深入理解Java虛擬機:JVM高級特性與最佳實踐(第二版》讀書筆記與常見面試題總結 本節常見面試題: 介紹下Java內存區域(運行時數據區)。 對象的訪問定位的兩種方式。 1 概述 對于Java...
閱讀 1408·2023-04-26 01:58
閱讀 2282·2021-11-04 16:04
閱讀 1753·2021-08-31 09:42
閱讀 1765·2021-07-25 21:37
閱讀 1066·2019-08-30 15:54
閱讀 2074·2019-08-30 15:53
閱讀 3047·2019-08-29 13:28
閱讀 2687·2019-08-29 10:56