1. 程式人生 > >Java 11 新功能來了!

Java 11 新功能來了!

html 未來 orm JD lam services frame 引入 世紀

關鍵時刻,第一時間送達!

目前 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 新功能來了!