編譯器優(yōu)化方法簡介

編譯器優(yōu)化方法簡介

ID:38345941

大?。?1.32 KB

頁數(shù):3頁

時(shí)間:2019-06-10

編譯器優(yōu)化方法簡介_第1頁
編譯器優(yōu)化方法簡介_第2頁
編譯器優(yōu)化方法簡介_第3頁
資源描述:

《編譯器優(yōu)化方法簡介》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫

1、Java編譯器優(yōu)化方法簡介(1)2010-09-1615:57shutiao2008.javaeye.com?我要評論(0)?字號:T?

2、?TJava應(yīng)用程序的編譯過程與靜態(tài)編譯語言(例如C或C++)不同,Java編譯器把Java源代碼轉(zhuǎn)換成可移植的JVM字節(jié)碼,這里向大家描述一下Java編譯器優(yōu)化的概念。AD:你對Java編譯器優(yōu)化的概念和方法是否熟悉,這里和大家分享一下,Java應(yīng)用程序的編譯過程與靜態(tài)編譯語言(例如C或C++)不同。靜態(tài)編譯器直接把源代碼轉(zhuǎn)換成可以直接在目標(biāo)平臺上執(zhí)行的機(jī)器代碼,不同的硬件平臺要求不同的編譯器。Java編譯器把Java源

3、代碼轉(zhuǎn)換成可移植的JVM字節(jié)碼。兩條編碼準(zhǔn)則與Java編譯器我們在寫代碼時(shí),常常會提到兩條原則:1、方法要盡量短,大方法要分解成小方法;2、不要重復(fù)發(fā)明輪子。我們在強(qiáng)調(diào)這兩個原則的時(shí)候,往往只關(guān)注的是代碼簡潔、易維護(hù)等方便我們?nèi)说囊蛩兀鋵?shí)這樣做還可以大大方便Java編譯器優(yōu)化代碼。Java編譯器優(yōu)化簡介:Java應(yīng)用程序的編譯過程與靜態(tài)編譯語言(例如C或C++)不同。靜態(tài)編譯器直接把源代碼轉(zhuǎn)換成可以直接在目標(biāo)平臺上執(zhí)行的機(jī)器代碼,不同的硬件平臺要求不同的編譯器。Java編譯器把Java源代碼轉(zhuǎn)換成可移植的JVM字節(jié)碼。與靜態(tài)編譯器不同,Javac幾乎不做什

4、么優(yōu)化,在靜態(tài)編譯語言中應(yīng)當(dāng)由編譯器進(jìn)行的優(yōu)化工作,在Java中是在程序執(zhí)行的時(shí)候,由運(yùn)行時(shí)執(zhí)行優(yōu)化。即時(shí)編譯對于證實(shí)概念的實(shí)現(xiàn)來說,解釋是合適的,但是早期的JVM由于太慢。下一代JVM使用即時(shí)(JIT)編譯器來提高執(zhí)行速度。按照嚴(yán)格的定義,基于JIT的虛擬機(jī)在執(zhí)行之前,把所有字節(jié)碼轉(zhuǎn)換成機(jī)器碼,但是以惰性方式來做這項(xiàng)工作:JIT只有在確定某個代碼路徑將要執(zhí)行的時(shí)候,才編譯這個代碼路徑(因此有了名稱“即時(shí)編譯”)。這個技術(shù)使程序能啟動得更快,因?yàn)樵陂_始執(zhí)行之前,不需要冗長的編譯階段。JIT技術(shù)看起來很有前途,但是它有一些不足。JIT消除了解釋的負(fù)擔(dān)(以額外的

5、啟動成本為代價(jià)),但是由于若干原因,代碼的優(yōu)化等級仍然是一般般。為了避免Java應(yīng)用程序嚴(yán)重的啟動延遲,JIT編譯器必須非常迅速,這意味著它無法把大量時(shí)間花在優(yōu)化上。所以,早期的JIT編譯器在進(jìn)行內(nèi)聯(lián)假設(shè)(inliningassumption)方面比較保守,因?yàn)樗鼈儾恢篮竺婵赡芤b入哪個類。雖然從技術(shù)上講,基于JIT的虛擬機(jī)在執(zhí)行字節(jié)碼之前,要先編譯字節(jié)碼,但是JIT這個術(shù)語通常被用來表示任何把字節(jié)碼轉(zhuǎn)換成機(jī)器碼的動態(tài)編譯過程——即使那些能夠解釋字節(jié)碼的過程也算。HotSpot動態(tài)編譯HotSpot執(zhí)行過程組合了編譯、性能分析以及動態(tài)編譯。它沒有把所有要執(zhí)

6、行的字節(jié)碼轉(zhuǎn)換成機(jī)器碼,而是先以解釋器的方式運(yùn)行,只編譯“熱門”代碼——執(zhí)行得最頻繁的代碼。當(dāng)HotSpot執(zhí)行時(shí),會搜集性能分析數(shù)據(jù),用來決定哪個代碼段執(zhí)行得足夠頻繁,值得編譯。只編譯執(zhí)行最頻繁的代碼有幾項(xiàng)性能優(yōu)勢:沒有把時(shí)間浪費(fèi)在編譯那些不經(jīng)常執(zhí)行的代碼上;這樣,編譯器就可以花更多時(shí)間來優(yōu)化熱門代碼路徑,因?yàn)樗涝谶@上面花的時(shí)間物有所值。而且,通過延遲編譯,編譯器可以訪問性能分析數(shù)據(jù),并用這些數(shù)據(jù)來改進(jìn)優(yōu)化決策,例如是否需要內(nèi)聯(lián)某個方法調(diào)用。為了讓事情變得更復(fù)雜,HotSpot提供了兩個Java編譯器:客戶機(jī)編譯器和服務(wù)器編譯器。默認(rèn)采用客戶機(jī)編譯器;

7、在啟動JVM時(shí),您可以指定-server開關(guān),選擇服務(wù)器編譯器。服務(wù)器編譯器針對最大峰值操作速度進(jìn)行了優(yōu)化,適用于需要長期運(yùn)行的服務(wù)器應(yīng)用程序。客戶機(jī)編譯器的優(yōu)化目標(biāo),是減少應(yīng)用程序的啟動時(shí)間和內(nèi)存消耗,優(yōu)化的復(fù)雜程度遠(yuǎn)遠(yuǎn)低于服務(wù)器編譯器,因此需要的編譯時(shí)間也更少。HotSpot服務(wù)器編譯器能夠執(zhí)行各種樣的類。它能夠執(zhí)行許多靜態(tài)編譯器中常見的標(biāo)準(zhǔn)優(yōu)化,例如代碼提升(hoisting)、公共的子表達(dá)式清除、循環(huán)展開(unrolling)、范圍檢測清除、死代碼清除、數(shù)據(jù)流分析,還有各種在靜態(tài)編譯語言中不實(shí)用的優(yōu)化技術(shù),例如虛方法調(diào)用的聚合內(nèi)聯(lián)。Java編譯器優(yōu)化

8、方法簡介(2)2010-09-1615:57shutiao2008.javaeye.com?我要評論(0)?字號:T?

9、?TJava應(yīng)用程序的編譯過程與靜態(tài)編譯語言(例如C或C++)不同,Java編譯器把Java源代碼轉(zhuǎn)換成可移植的JVM字節(jié)碼,這里向大家描述一下Java編譯器優(yōu)化的概念。AD:持續(xù)重新編譯HotSpot技術(shù)另一個有趣的方面是:編譯不是一個全有或者全無(all-or-nothing)的命題。在解釋代碼路徑一定次數(shù)之后,會把它重新編譯成機(jī)器碼。但是JVM會繼續(xù)進(jìn)行性能分析,而且如果認(rèn)為代碼路徑特別熱門,或者未來的性能分析數(shù)據(jù)認(rèn)為存在額外的優(yōu)化可

10、能,那么還有可能用更高一級的優(yōu)化重新編譯代碼。JVM

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動畫的文件,查看預(yù)覽時(shí)可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時(shí)聯(lián)系客服。
3. 下載前請仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯誤,付費(fèi)完成后未能成功下載的用戶請聯(lián)系客服處理。