近日,Azul Systems發(fā)布了Zing 17.03。該版本完全支持Azul基于LLVM的新的Java即時(shí)(JIT)編譯器Falcon。該編譯器設(shè)計(jì)用來取代Zing先前版本以及Oracle HotSpot和OpenJDK使用的C2編譯器。Falcon是1997年JavaOne大會(huì)推出C2以來Java SE的第一個(gè)新的生產(chǎn)用JIT編譯器。
LLVM是一個(gè)現(xiàn)代化的開源編譯器框架,也是Swift、Rust等許多新語言首選的后端“引擎”。它獲得了學(xué)術(shù)界的大力支持,并且擁有包括AMD、Apple、Cray、IBM、Intel、 Microsoft、Sony和SAP在內(nèi)的眾多商業(yè)支持者。廣泛的支持可以幫助它充分利用新的服務(wù)器硬件和新的指令集,它經(jīng)常利用新的處理器技術(shù),如Intel的Broadwell和Skylake處理器提供的矢量化和加密優(yōu)化,早在其他語言之前提供這種支持。
Azul首席執(zhí)行官Gil Tene告訴InfoQ:
使用LLVM為我們提供了巨大的優(yōu)勢,數(shù)以百計(jì)的人對(duì)它進(jìn)行優(yōu)化,讓它與最新的處理器能力保持同步,這些成果可以立即應(yīng)用到Java代碼上。
關(guān)于這一點(diǎn),一個(gè)簡單具體的例子是,F(xiàn)alcon已經(jīng)使用Intel最新的CPU(例如,當(dāng)前Broadwell Intel E5-v4服務(wù)器上的AVX2指令集)所提供的最新/最棒的矢量指令功能來優(yōu)化常規(guī)的Java循環(huán)。由于AVX2增加了謂詞矢量運(yùn)算能力,所以Falcon能夠在循環(huán)(例如,“將數(shù)組中的偶數(shù)相加”)中矢量化在之前的硬件上無法矢量化的謂詞操作,因此,同樣的Java類在較新的服務(wù)器上執(zhí)行速度更快。[目前]HotSpot甚至都沒有試一下……
但最重要的是,我們獲得了這種好處,不是通過一群Azul工程師花時(shí)間進(jìn)行矢量化優(yōu)化以及選擇恰當(dāng)?shù)姆椒ㄆヅ涿恳环N處理器。舉例來說,我們是從Intel過去兩年的投入以及他們將這些優(yōu)化貢獻(xiàn)給LLVM獲益的。他們的貢獻(xiàn)已經(jīng)應(yīng)用到了C/C++/Clang/Rust,就像(現(xiàn)在)應(yīng)用到Java一樣。
Falcon讓我們可以做一些很酷的、JVM相關(guān)的優(yōu)化,而使用C2則無法應(yīng)用這些優(yōu)化。GC屏障相關(guān)的優(yōu)化就是其中的一個(gè)例子。此外還有更高層次的語言優(yōu)化。關(guān)于更高層次的優(yōu)化,一個(gè)具體的例子是,我們用較少的投入就在Falcon中引入了針對(duì)“真正final”字段的優(yōu)化,在C2中引入的話,投入要多得多。[實(shí)例final字段的挑戰(zhàn)在于,它們可能不是“真正final”的,因?yàn)榉瓷浜蚒nsafe可以重寫它們,而且經(jīng)常這樣做]。Falcon能夠優(yōu)化Java中使用實(shí)例final字段的操作,它所采用的方式是以前的JIT不曾做過的(例如,將數(shù)組范圍檢查提取到循環(huán)之外)。過去的幾年里,在HotSpot和Zing中,這一特性一直處于原型模型開發(fā)階段(在OpenJDK的部分郵件列表中可以找到相關(guān)討論),但之前從沒有在哪個(gè)JVM中實(shí)現(xiàn)產(chǎn)品化,其中有一部分原因是讓JIT編輯器處理得很好復(fù)雜度很高。
有鑒于此,F(xiàn)alcon在新硬件上性能超過C2就不奇怪了。例如,Tene告訴InfoQ,在特定的加密負(fù)載基準(zhǔn)測試中,它比Oracle HotSpot快3.5倍,比Oracle HotSpot使用基于Skylake的服務(wù)器(Intel Xeon E5-xxxx)進(jìn)行Cassandra基準(zhǔn)測試快大約10%。另外,在低延遲環(huán)境中,它也比Zing以前的版本快許多。按照Tene的說法,一個(gè)運(yùn)行交易基礎(chǔ)設(shè)施的Azul Zing客戶觀察到了大約18~24%的速度提升。
Azul是第一個(gè)在生產(chǎn)級(jí)托管運(yùn)行時(shí)中使用LLVM的組織。為了完成這項(xiàng)工作,LLVM借助Azul提供的其他功能進(jìn)行了增強(qiáng),包括安全點(diǎn)和GC屏障方面的優(yōu)化,提供JIT代碼替換和逆優(yōu)化的能力,包括隱式null檢查、預(yù)測去虛擬化及保護(hù)內(nèi)聯(lián)在內(nèi)的預(yù)測運(yùn)行時(shí)優(yōu)化。
如你所料,F(xiàn)alcon還支持Azul在2014年推出的ReadyNow技術(shù)。按照設(shè)計(jì),ReadyNow是為了避免Java虛擬機(jī)“預(yù)熱”,鑒于JVM有足夠的時(shí)間學(xué)習(xí)哪些代碼要編譯成機(jī)器級(jí),應(yīng)用程序所有者試圖通過這種方法充分利用JIT編譯器優(yōu)化。
現(xiàn)有用戶可以從Zing支持門戶上直接下載Zing 17.03。Azul網(wǎng)站上也提供了Zing新版本的30天試用。Zing單許可的全年訂閱價(jià)為每臺(tái)服務(wù)器3500美元,大量許可長期訂閱價(jià)格會(huì)低許多。
5月4日,太平洋時(shí)間上午11點(diǎn),Azul首席技術(shù)官Gil Tene舉辦了一場題為“走進(jìn)Falcon編譯器”的網(wǎng)絡(luò)研討會(huì)。研討會(huì)加Q&A持續(xù)了約一小時(shí)。
查看英文原文:Azul Systems Launches Falcon, a New Just-in-Time Compiler for Java, Based on LLVM