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