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