李顏
近日,Java官方團(tuán)隊正式發(fā)布了Java 17,其被稱為史上最快,是因為OptaPlanner網(wǎng)站做了一項基準(zhǔn)測試,平均而言,以O(shè)ptaPlanner為例的基準(zhǔn)測試結(jié)果表明:
對于G1GC(默認(rèn)),Java 17比Java 11快8.66 %,比Java 16快2.41 %;
對于ParallelGC,Java 17比Java 11快6.54 %,比Java 16快0.37 %;
Parallel GC比G1 GC快16.39 %。
既然Java 17已經(jīng)是史上最快了,那么,Java18還有哪些可以期待的呢?
與此同時,Java 18也已經(jīng)進(jìn)入早期開發(fā)階段。Java 18將作為標(biāo)準(zhǔn)Java版本的參考計劃在明年3月發(fā)布,當(dāng)下已經(jīng)提出了孵化矢量API、預(yù)覽記錄模式和數(shù)組模式,以及采用UTF-8作為默認(rèn)字符集的建議。
離正式發(fā)布Java 18還有6個月時間,但它已經(jīng)初具形態(tài),預(yù)計有4個功能提案,最新的是對矢量API的第三次孵化。截至9月20日,Java開發(fā)工具包(JDK)18的OpenJDK頁面列出了矢量API、代碼片段和UTF-8字符集。JEP也引用了JDK 18的記錄模式和數(shù)組模式的提議。
預(yù)計在2022年3月發(fā)布的JDK 18將是一個短期功能版本,支持時間僅為6個月??梢栽贘ava.net上找到適用于Linux、Windows和MacOS的JDK 18早期訪問版本。
關(guān)于JDK 18提案的細(xì)節(jié)包括:
1.矢量API將在JDK 18中進(jìn)行第三次孵化,之前已經(jīng)在JDK 16和JDK 17中孵化過。這項提議將在運(yùn)行時編譯為支持的CPU架構(gòu)上的最佳矢量指令,從而實現(xiàn)優(yōu)于等效標(biāo)量計算的性能。矢量運(yùn)算表達(dá)了一定程度的并行化,使更多的工作可以在單個CPU周期內(nèi)完成,從而產(chǎn)生顯著的性能改進(jìn)。與平臺無關(guān)的矢量API旨在提供一種在Java中編寫復(fù)雜算法的方法,使用現(xiàn)有的HotSpot虛擬機(jī),但使用用戶模型使矢量化更具可預(yù)測性。JDK 18還將增加對ARM標(biāo)量向量擴(kuò)展平臺的支持,并提高在支持硬件掩碼的架構(gòu)上接受掩碼的向量操作的性能。
2.記錄模式和數(shù)組模式的預(yù)覽。其中將使用記錄模式和數(shù)組模式對Java語言進(jìn)行增強(qiáng),以解析記錄值,并使用數(shù)組模式解析數(shù)組值。JDK 16中所包含的記錄模式、數(shù)組模式和類型模式可以被嵌套,從而顯著增強(qiáng)模式匹配的表現(xiàn)性和實用性。提案的目標(biāo)包括擴(kuò)展模式匹配,以表達(dá)更復(fù)雜、可組合的數(shù)據(jù)查詢,并且不改變類型模式的語法或語義。
3.將UTF-8指定為標(biāo)準(zhǔn)Java APIs的默認(rèn)字符集。UTF-8是一種用于電子通信的可變范圍的字符編碼,被認(rèn)為是網(wǎng)絡(luò)的標(biāo)準(zhǔn)字符集,字符集是能夠?qū)W(wǎng)絡(luò)上的所有字符進(jìn)行編碼。通過此更改,依賴于默認(rèn)字符集的API將在所有的實現(xiàn)、操作系統(tǒng)、地區(qū)和配置中表現(xiàn)一致。該提議并不打算定義新的Java標(biāo)準(zhǔn)或JDK特定的API。支持者們認(rèn)為,許多環(huán)境中的應(yīng)用程序不會受到Java選擇UTF-8的影響,因為MacOS、許多Linux發(fā)行版和許多服務(wù)器應(yīng)用程序已經(jīng)支持UTF-8。然而,在其他環(huán)境中存在風(fēng)險。最明顯的是依賴默認(rèn)字符集的應(yīng)用程序在處理默認(rèn)字符集未被指定時,產(chǎn)生的數(shù)據(jù)將表現(xiàn)得不正確,數(shù)據(jù)損壞可能會悄悄發(fā)生。
4. Java API文檔中的代碼片段,涉及為JavaDoc的標(biāo)準(zhǔn)Doclet引入@snippet標(biāo)簽,以簡化API文檔中的示例源代碼。該計劃的目標(biāo)之一是通過提供對這些片段的API訪問來促進(jìn)源代碼片段的驗證。雖然正確性是作者的責(zé)任,但在JavaDoc和相關(guān)工具中加強(qiáng)支持可以使其更容易實現(xiàn)。其他目標(biāo)包括啟用現(xiàn)代樣式,如語法突出顯示,、稱與聲明的自動鏈接,以及啟用更好的IDE支持來創(chuàng)建和編輯代碼段。該提案指出,API文檔的作者經(jīng)常在文檔注釋中包含源代碼的片段。