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