標籤:表達 JD 兩種 獨立 存取控制 常量池 arch family 橢圓
關鍵時刻,第一時間送達!
目前 Oracle 已經發布了 Java Development Kit 10,下個版本 JDK 11 也即將發布。本文介紹 Java 11 的新功能。
根據Oracle新出台的每6個月發布一次Java SE的節奏,Java 11將於2018年9月發布,迄今為止Oracle已經宣布了好幾個新功能。
此外,Java 11還將刪除一些功能,其中包括刪除CORBA和Java EE(最近更名為Jakarta EE)模組,以及刪除JavaFX。
與JDK 10不同,JDK 11將提供長期支援,還將作為Java平台的參考實現以及標準版(Java SE)11。Oracle直到2023年9月都會為JDK 11提供一級支援,而補丁和安全警告等擴充支援將延續到2026年。新的長期支援版本每三年發布一次,根據後續的發行計劃,JDK 17將於2021年發布。
Java 11 JDK中已計劃的新功能
目前來看,JDK 11已有九個已經確認的新功能,而且還有更多新功能仍在考慮之中。計劃的新功能包括:
HTTP用戶端(標準),這個功能於JDK 9中引入並在JDK 10中得到了更新,現在終於轉正了。該API通過CompleteableFutures提供非阻塞請求和響應語義,可以聯合使用以觸發相應的動作。自從JDK 9和10中引入該功能後,JDK 11完全重寫了該功能,現在其實現完全是非同步。RX Flow的概念也得到了實現,這樣就無需為了支援HTTP/2而創造許多概念了。現在,在使用者層請求發行者和響應發行者與底層通訊端之間追蹤資料流更容易了。這降低了複雜性,並最大程度上提高了HTTP/1和HTTP/2之間的重用的可能性。
Epsilon記憶體回收行程,被稱為“no-op”回收器,它僅負責記憶體配置,卻沒有實現任何實際的記憶體回收機制。Epsilon回收器可以用於效能測試、記憶體壓力測試和虛擬機器介面。它還可以用於短生命週期的任務。
lambda參數的局部變數文法,可以消除隱含類型運算式中正式參數定義的文法與局部變數定義文法的不一致。這樣就能在隱含類型的lambda運算式中定義正式參數時使用var了。
Java的類檔案格式將被擴充,以支援新的常量池,CONSTANT_Dynamic。其目標是降低開發新形式的可實作類別檔案約束帶來的成本和幹擾。
採用Curve25519和Curve448加密的金鑰交換比現有的Diffie-Hellman橢圓曲線金鑰交換方式更有效、更安全。根據IETF的資料,Curve25519和Curve448兩種橢圓曲線採用常量時間的實現方式,以及不會發生異常的數乘實現,能更好地抵抗各種旁路攻擊,包括時序攻擊、緩衝攻擊等。該提案的目標是為金鑰交換方法提供一個API和實現,同時開發一個平台無關、純Java的的實現。由於該提案採用了複雜且精密的模算數,因此還是有風險的。
飛行記錄儀(Flight Recorder)將提供低開銷的資料收集架構,用來調試Java應用程式和HotSpot JVM。飛行記錄儀是Oracle的商業版JDK的功能,但在JDK 11中,其代碼將移動到公開程式碼程式庫中,這樣所有人都能使用該功能了。Iclouded將作為API,以事件的形式產生或消耗資料,同時提供緩衝機制、位元據工具,同時支援配置和事件過濾。該提案還提議為OS、HotSpot和JDK庫提供事件。
更新platform API以支援Unicode版本10.0,從而使Java跟上潮流。預計以下的類將支援:
lang包中的Character和String
awt.font包中的NumericShaper
text包中的Bidi、BreakIterator和Normalizer
實現ChaCha20和Poly1305密碼編譯演算法。ChaCha20是種相對較新的流密碼編譯演算法,能代替舊的、不安全的R4流加密。ChaCha20將與Poly1305認證演算法配對使用。ChaCha20和ChaCha20-Poly1305加密實現將通過crypto.CipherSpi API於SunJCE(Java加密擴充)中提供。
增強Java啟動器,使之能夠運行單一檔案的Java原始碼,使得應用程式可以直接從原始碼運行。單檔案程式常見於小型工具,或開發人員初學Java時使用。而且,單一原始碼檔案有可能會編譯成多個類檔案,這會增加打包開銷。由於這些原因,在運行程式之前進行編譯,已成為了不必要的步驟。
Java JDK 11仍在開發中的新功能
Java 11的建立者們還在考慮幾個對JDK 11的變更或新功能的提案:
給Java添加raw字串字面值。這樣可以更容易地以人類可閱讀的形式書寫字元序列,而無需特殊的Java標記。這樣也能更容易地將非Java文法的字串提供給Java使用,還能支援多行字串,而無需使用特殊的標記。
擴充switch語句,使之能作為語句或運算式使用。這樣還能改進switch處理null值的方式。這些改動可以簡化編程,同時為switch支援模式比對做準備。
嵌套的存取控制,對應於Java當前的巢狀型別。嵌套可以讓邏輯上屬於同一代碼實體但被編譯到不同的類檔案中的類互相訪問對方的私人成員,而無需讓編譯器插入擴大存取權限的方法。
JDK 11刪除的功能
Java EE和CORBA模組從Java SE9就成了不推薦使用(deprecated),並計劃在未來的版本中刪除。這個未來版本就是JDK 11。
Java SE 6於2006年12越發布,它為Java EE平台提供了整套的Web服務技術棧:JAX-WS(Java API for XML-based Web Services),JAXB(Java Architecture for XML Binding),JAF(JavaBeans Activation Framework),以及Common Annotations for Java。這些年來,Java EE版本在不斷進化,這給Java SE造成了許多麻煩,例如加入與Java SE無關的技術,以及同時維護兩個Java版本的困難變得更大。由於獨立的Java EE版本由第三方網站提供,Oracle說Java SE或JDK中已經沒有必要提供Java EE了。
當然,一些依賴於JDK中的Java EE API及工具的應用程式將無法編譯或運行。將JDK 6、7或8移植到新版本時將會產生二進位不相容和原始碼不相容。Oracle說,受到這些影響的開發人員可以部署相應的Java EE版本。
CORBA來自於二十世紀九十年代,Oracle說,現在用CORBA開發現代Java應用程式已經沒有意義了,維護CORBA的成本已經超過了保留它帶來的好處。
但是刪除CORBA將使得那些依賴於JDK提供部分CORBA API的CORBA實現無法運行。目前還沒有第三方CORBA版本,也不確定是否會有第三方願意接手CORBA API的維護工作。
JavaFX已經被移除,因此已經與Java JDK每年兩次的更新無關。
原文:https://www.infoworld.com/article/3265447/java/java-11-roadmap-the-new-features-you-can-expect.html
譯者:彎月,責編:言則
Java 11 新功能來了!