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