Java 11新功能搶先了解

目前 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 六、7或8移植到新版本時將會產生二進制不兼容和源代碼不兼容。Oracle說,受到這些影響的開發者能夠部署相應的Java EE版本。工具

CORBA來自於二十世紀九十年代,Oracle說,如今用CORBA開發現代Java應用程序已經沒有意義了,維護CORBA的成本已經超過了保留它帶來的好處。性能

可是刪除CORBA將使得那些依賴於JDK提供部分CORBA API的CORBA實現沒法運行。目前尚未第三方CORBA版本,也不肯定是否會有第三方願意接手CORBA API的維護工做。

JavaFX已經被移除,所以已經與Java JDK每一年兩次的更新無關。

Java架構師學習公衆號!

一個專一分享架構乾貨的微信公衆號

相關文章
相關標籤/搜索