您是否能及时编译?
還記得上次被C開發(fā)人員嘲笑的時候嗎? Java如此繁瑣,以至于他們甚至都不會考慮使用這種語言?
在許多方面,這一概念仍然成立。 但是對于典型的用法(在大型企業(yè)的骨干中),Java性能絕對可以與許多競爭者抗衡。 這在很大程度上要?dú)w功于神奇的JIT。
在深入解釋“即時”編譯技巧之前,讓我們深入了解一下背景知識。
您可能還記得– Java是一種解釋型語言。 大多數(shù)用戶都知道的Java編譯器javac不會像C編譯器那樣直接將Java源文件編譯為處理器指令。 而是生成字節(jié)碼,這是由規(guī)范控制的與機(jī)器無關(guān)的二進(jìn)制格式。 JVM在運(yùn)行時解釋該字節(jié)碼。這是Java在跨平臺上如此成功的主要原因-您可以在一個平臺上編寫和構(gòu)建程序,然后在其他平臺上運(yùn)行。 另一方面,它確實(shí)引入了一些負(fù)面方面。 其中最嚴(yán)重的事實(shí)之一是,解釋的代碼通常比直接編譯為平臺特定的本機(jī)二進(jìn)制代碼的代碼要慢。 Sun雇用Cliff Click博士提供解決方案時,已經(jīng)在90年代末意識到了這種嚴(yán)重性。
歡迎– HotSpot 。 該名稱源自JVM識別應(yīng)用程序中“熱點(diǎn)”(經(jīng)常執(zhí)行的字節(jié)代碼塊)的功能。 然后將它們作為目標(biāo),以進(jìn)行廣泛的優(yōu)化并將其編譯為處理器專用指令。 通過優(yōu)化,可以以最少的開銷實(shí)現(xiàn)對性能要求較低的代碼的高性能執(zhí)行。 在某些情況下, JVM的自適應(yīng)優(yōu)化有可能超過手工編碼的C ++或C代碼的性能。
JVM中負(fù)責(zé)這些優(yōu)化的組件稱為即時編譯器(JIT)。 它利用了有趣的程序?qū)傩浴?實(shí)際上,所有程序都將大部分時間都花在執(zhí)行少量代碼上。 Java HotSpot VM不會及時編譯所有代碼,而是立即使用解釋器運(yùn)行程序,并在運(yùn)行時分析代碼以檢測程序中的關(guān)鍵熱點(diǎn)。 然后,它將全球本地代碼優(yōu)化器的注意力集中在熱點(diǎn)上。 通過避免不經(jīng)常執(zhí)行的代碼的編譯,Java HotSpot編譯器可以更加關(guān)注程序的性能關(guān)鍵部分。 這意味著您的編譯時間總體上不會增加??。 該熱點(diǎn)監(jiān)視將在程序運(yùn)行時動態(tài)地繼續(xù)進(jìn)行,以便根據(jù)您的應(yīng)用程序的使用模式即時調(diào)整其性能。
JIT通過多種技術(shù)來實(shí)現(xiàn)性能優(yōu)勢,例如消除無效代碼,繞過邊界條件檢查,消除冗余負(fù)載,內(nèi)聯(lián)方法等。
以下示例說明了JIT用來實(shí)現(xiàn)更好性能的那些技術(shù)。 在第一部分中,有開發(fā)人員編寫的代碼。 在第二個代碼段中,是在熱點(diǎn)檢測到“熱點(diǎn)”并應(yīng)用了優(yōu)化魔術(shù)之后執(zhí)行的代碼:
上面的小樣本中描述的第一類是開發(fā)人員編寫的類,第二類是JIT完成工作之后的示例。 該示例包含一些應(yīng)用的優(yōu)化技術(shù)。 讓我們看一下如何達(dá)到最終結(jié)果:
這個小樣本包含JIT用來提高代碼性能的幾種強(qiáng)大技術(shù)。 希望它對理解這個強(qiáng)大的概念很有幫助。
喜歡這個職位嗎? 我們還有很多工作要做。 訂閱我們的RSS feed或Twitter流并享受。
本文使用了以下相關(guān)鏈接(兩個憤怒的C開發(fā)人員除外):
- http://www.oracle.com/technetwork/java/whitepaper-135217.html
- http://www.oracle.com/technetwork/java/javase/tech/index-jsp-136373.html
- http://docs.oracle.com/cd/E13150_01/jrockit_jvm/jrockit/geninfo/diagnos/underst_jit.html
參考: 您是否能及時編譯? 由我們的JCG合作伙伴 Nikita Salnikov Tarnovski在Plumbr Blog博客上獲得。
翻譯自: https://www.javacodegeeks.com/2012/12/do-you-get-just-in-time-compilation.html
總結(jié)
- 上一篇: MapReduce算法–顺序反转
- 下一篇: 选择您的收藏库