如何理解JVM for Linux JIT診斷技術(shù),針對(duì)這個(gè)問(wèn)題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問(wèn)題的小伙伴找到更簡(jiǎn)單易行的方法。
讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來(lái)自于我們對(duì)這個(gè)行業(yè)的熱愛(ài)。我們立志把好的技術(shù)通過(guò)有效、簡(jiǎn)單的方式提供給客戶,將通過(guò)不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:申請(qǐng)域名、虛擬空間、營(yíng)銷軟件、網(wǎng)站建設(shè)、惠安網(wǎng)站維護(hù)、網(wǎng)站推廣。
JVM有很多值得學(xué)習(xí)的地方,簡(jiǎn)要介紹Just-In-Time(JIT)編譯器和Mixed ModeInterpreter(MMI)優(yōu)化技術(shù),在IBM的JVM1.3.1和1.4.2中使用了這兩種技術(shù),它們對(duì)于從SunHotspotJVM上遷移過(guò)來(lái)的Java程序可能產(chǎn)生影響。
JVM for Linux JIT 診斷技術(shù)簡(jiǎn)介
“一次編寫(xiě),到處運(yùn)行”(WORA)的原則只有在將純Java™的字節(jié)碼從一個(gè)平臺(tái)的某個(gè)特定版本的Java虛擬機(jī)(JVM)移植到另外一個(gè)不同平臺(tái)上完全相同版本的JVM上時(shí)才適用。
然而,有時(shí)這種遷移過(guò)程并不是無(wú)縫的??梢詫?duì)這個(gè)遷移過(guò)程產(chǎn)生影響的一個(gè)因素是不同供應(yīng)商的優(yōu)化技術(shù)的內(nèi)部實(shí)現(xiàn)之間存在差異。
在將一個(gè)Java程序從使用SunJDK的平臺(tái)遷移到使用IBMJDK的平臺(tái)上時(shí),重要的是要了解在這兩個(gè)供應(yīng)商的JVM中使用的優(yōu)化技術(shù)之間的差異,這些差異可能會(huì)對(duì)程序產(chǎn)生影響,以及如何通過(guò)調(diào)節(jié)IBM JVM中可用的優(yōu)化機(jī)制來(lái)獲得更好的性能。
本文著重介紹對(duì)于在JVM for Linux JIT中碰到的問(wèn)題的診斷,在從SunHotSpotJVM遷移到IBM基于JVM for Linux JIT的JVM時(shí)可能會(huì)碰到這些問(wèn)題。
雖然本文中介紹的大部分內(nèi)容對(duì)于IBMJVM1.3.1和1.4.2都是普遍適用的,但是尤其適用于IBMJVM1.3.1和JVM1.4.2forLinux,包括POWER和PowerPC架構(gòu)上的Linux。
在Sun的JVM1.3.1中,JIT和HotSpot編譯器都已經(jīng)包含其中了,可以使用-server或-hotspot選項(xiàng)(默認(rèn)為客戶機(jī)HotSpotVM)來(lái)調(diào)用,使用-classic選項(xiàng)調(diào)用JIT,-hotspot選項(xiàng)是隱含的默認(rèn)值。在SunJDK1.4.1及之后的版本中,只能使用HotSpot了。IBMJVM1.3.1和1.4.2使用了JIT和MMI的組合,這是默認(rèn)的運(yùn)行模式,可以實(shí)現(xiàn)與HotSpot相同的功能。
JVM for Linux JIT和MMI
用來(lái)提高Java程序性能的工具是Just-In-Time(JIT)編譯器。JVM for Linux JIT是一個(gè)代碼生成器,它將Java字節(jié)碼轉(zhuǎn)換成宿主平臺(tái)的本地代碼。Java程序使用JIT調(diào)用時(shí)的運(yùn)行速度通常都比使用解釋程序執(zhí)行字節(jié)碼時(shí)的速度更快。
當(dāng)JVM啟動(dòng)時(shí),會(huì)有很多方法被加載到JVM中并執(zhí)行。
如果JIT被禁用了,那么JVM啟動(dòng)會(huì)很快,但是在大部分情況中,運(yùn)行程序的速度都會(huì)與解釋字節(jié)碼的速度一樣慢。如果JIT被啟用了,但是并沒(méi)有使用JIT的一些自適應(yīng)式優(yōu)化機(jī)制,就會(huì)試圖在啟動(dòng)時(shí)對(duì)所有方法進(jìn)行編譯。對(duì)于諸如applet之類的小程序來(lái)說(shuō),當(dāng)啟動(dòng)JVM的時(shí)間長(zhǎng)于運(yùn)行程序的時(shí)間時(shí),就可能會(huì)成為問(wèn)題。
IBM JVMMixedModeInterpreter(MMI)與JIT緊密地結(jié)合在一起,它可以減輕這個(gè)問(wèn)題。它可以用于與HotSpotVM相同的目的,將編譯方法延伸到JVM的生命期之外。除了其他特性之外,MMI還可以計(jì)算一個(gè)特定的方法被執(zhí)行了多少次。為了達(dá)到平衡的性能,MMI對(duì)于IBMJVM支持的每種平臺(tái)都有一個(gè)默認(rèn)的上限計(jì)數(shù)器,這是經(jīng)過(guò)仔細(xì)選擇的,并經(jīng)過(guò)了廣泛的測(cè)試和研究。
每執(zhí)行一次方法,該方法在MMI中的上限計(jì)數(shù)器就減1。當(dāng)一個(gè)方法的上限計(jì)數(shù)器達(dá)到零(0)時(shí),就可以使用JIT將這個(gè)方法編譯成本地代碼了。因此,與HotSpotVM一樣,高頻率使用的方法——“熱點(diǎn)”——都會(huì)在啟動(dòng)JVM之后由JIT進(jìn)行編譯,而低頻度使用的方法則會(huì)在之后進(jìn)行編譯,或者可能在整個(gè)JVM進(jìn)程的生命周期中都不會(huì)被編譯。
IBM JVM1.3.1和1.4.2還為改進(jìn)某些Java程序的啟動(dòng)時(shí)間而提供了一個(gè)非標(biāo)準(zhǔn)的選項(xiàng)-Xquickstart。-Xquickstart選項(xiàng)會(huì)導(dǎo)致使用優(yōu)化選項(xiàng)的子集來(lái)運(yùn)行JIT;也就是說(shuō),快速編譯的方法。這個(gè)選項(xiàng)適用于短期運(yùn)行的程序,特別是那些執(zhí)行時(shí)間不集中在少量的“熱點(diǎn)”方法中的程序。如果-Xquickstart選項(xiàng)用在長(zhǎng)時(shí)間運(yùn)行的程序上,而這些程序又包含一些熱點(diǎn)方法,那么這個(gè)選項(xiàng)就可能會(huì)導(dǎo)致性能的降低。
與其他非標(biāo)準(zhǔn)的-X選項(xiàng)一樣,-Xquickstart選項(xiàng)的實(shí)現(xiàn)和存在都可能不加通知就會(huì)修改。
可以減小MMI上限計(jì)數(shù)器,從而加速JIT編譯一個(gè)方法的過(guò)程;或者增大它以達(dá)到相反的效果。這是通過(guò)使用一個(gè)環(huán)境變量IBM_MIXED_MODE_THRESHOLD實(shí)現(xiàn)的,與其他環(huán)境變量一樣,需要在運(yùn)行JVM進(jìn)程的shell實(shí)例中進(jìn)行設(shè)置。自然,這個(gè)變量是在啟動(dòng)JVM進(jìn)程之前設(shè)置的,對(duì)于在JVM中執(zhí)行的所有方法都是有效的。
將IBM_MIXED_MODE_THRESHOLD設(shè)置為0可以禁用MMI,這樣,所有的方法在***加載到JVM中時(shí)就可以立即使用JIT進(jìn)行編譯。
IBM JVM運(yùn)行時(shí)模式如下:
◆MMI和JIT都啟用
這是默認(rèn)的IBMJVM設(shè)置。
◆MMI禁用,JIT啟用
所有的方法都是在***運(yùn)行之前編譯的,即JVM的啟動(dòng)時(shí)間可能會(huì)很慢,但是后來(lái)的性能會(huì)很好。
◆MMI和JIT都禁用
JVM是一個(gè)純解釋系統(tǒng)。所有的代碼都不會(huì)進(jìn)行編譯。禁用JVM for Linux JIT同時(shí)還會(huì)自動(dòng)禁用MMI,并將IBM_MIXED_MODE_THRESHOLD設(shè)置為0,這樣可以有效地禁用MMI,但是不會(huì)禁用JIT。
MMI是一個(gè)非常有效的解釋器,利用宿主平臺(tái)上的程序集代碼來(lái)達(dá)到***的優(yōu)化。雖然JIT并不是JVM的一個(gè)集成部分,但卻以一個(gè)共享庫(kù)(libjitc)的形式提供了,它與MMI緊密地結(jié)合在一起,JVM for Linux JIT和MMI是IBMJVM中緊密結(jié)合的兩種技術(shù)。
在JavaHotSpotVM或經(jīng)典的JIT模式中使用的是SunJVM1.3.1,Sun的JIT實(shí)現(xiàn)并不與IBM的JIT完全相同;SunHotSpotJVM1.4.1中根本沒(méi)有JIT。當(dāng)將Java程序從SunJVM1.3.1或SunJVM1.4.1遷移到IBMJVM上時(shí),在一些非常罕見(jiàn)的情況中可能會(huì)出現(xiàn)問(wèn)題,問(wèn)題的范圍從性能的下降,到代碼會(huì)產(chǎn)生不正確的結(jié)果,以及JVM的掛起、崩潰和出現(xiàn)一些異常。
關(guān)于如何理解JVM for Linux JIT診斷技術(shù)問(wèn)題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒(méi)有解開(kāi),可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識(shí)。
網(wǎng)頁(yè)標(biāo)題:如何理解JVMforLinuxJIT診斷技術(shù)
網(wǎng)頁(yè)地址:http://jinyejixie.com/article36/jdogsg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站策劃、品牌網(wǎng)站制作、自適應(yīng)網(wǎng)站、企業(yè)網(wǎng)站制作、外貿(mào)建站、面包屑導(dǎo)航
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)