1. 程式人生 > >一篇文章瞭解新發布的Java JDK 11

一篇文章瞭解新發布的Java JDK 11

Java JDK 11刪除了CORBA,Java EE和JavaFX支援,但添加了十幾個主要新功能。

Java Development Kit(JDK)11現已普遍可用,可供生產使用,提高了工作效率,並提供了實現HTTP/2的HTTP客戶端API。

Java Standard Edition(SE)11有16個主要功能更改。Java 11還通過刪除CORBA和Java EE(最近更名為Jakarta EE)模組以及刪除JavaFX而失去了一些功能 ,JavaFX現在可作為獨立技術使用。

在Java 11中,Oracle已將主線儲存庫jdk/jdk分叉到jdk/jdk11穩定儲存庫。推送到jdk/jdk

jdk/client的更改現在標記為JDK 12.穩定儲存庫可以接受選定的錯誤修復,如果獲得批准,則可以根據JDK釋出過程接受後期增強。

Oracle標準Java實現的最新版本是一個長期支援(LTS)版本,它將得到Oracle至少8年的商業支援。到2026年將提供Bug修復和安全更新。新的LTS版本每三年釋出一次,JDK 17將於2021年釋出,這將是下一個LTS版本。中期版本將每六個月釋出一次。

哪裡可以下載JDK 11

您可以從Oracle Technology Network 下載JDK 11

Java 11 JDK中的新功能

JDK 11有16個新功能:

  • 通過lang.Math

    在Aarch64處理器上實現sin,cos和log函式的新內在函式,改進Aarch64內在函式。該提案強調專用的CPU體系結構特定的程式碼模式,可提高應用程式和基準效能。

  • 基於巢狀的訪問控制引入了巢狀,這是一種與Java語言中巢狀型別概念一致的訪問控制上下文。巢狀允許邏輯上屬於同一程式碼實體的類,但編譯為不同的類檔案以訪問彼此的私有成員,而無需編譯器插入可訪問性擴充套件橋接方法。

  • 傳輸層安全性(TLS)1.3,其中TLS協議的這種大修將適用於JDK 11,從而提供顯著的安全性和效能優勢。但是,沒有目標支援TLS 1.3的每個功能。為了最大限度地降低不相容的風險,TLS 1.3預設會實現向後相容模式。應用程式可以根據需要關閉或開啟此模式。

  • Nashorn JavaScript引擎與JJS工具的棄用,旨在將來刪除它們。鑑於ECMAScript語言構建和API的快速調整和修改,Oracle發現Nashorn難以維護。

  • HTTP客戶端(標準),它標準化了JDK 9中引入並在JDK 10中更新的孵化HTTP API客戶端。API提供非阻塞請求和響應語義CompleteableFutures,可以連結到觸發器依賴操作。在JDK 9和10中孵化之後,現在非同步的實現幾乎已經完全重寫.RX Flow概念已經被推入實現中,消除了支援HTTP / 2所需的許多自定義概念。現在可以更輕鬆地跟蹤資料流,從使用者級請求釋出者和響應釋出者到底層套接。這降低了複雜性並最大化了HTTP / 1和HTTP / 2之間重用的可能性。

  • 被稱為“無操作”收集器的Epsilon垃圾收集器將處理記憶體分配,而不實現任何實際的記憶體回收機制。Epsilon的用例包括效能測試,記憶體壓力和虛擬機器介面。它也可以用於短期工作。

  • lambda引數的區域性變數語法應該將隱式型別表示式中的形式引數宣告的語法與區域性變數宣告的語法對齊。這將允許var 在宣告隱式型別的lambda表示式的形式引數時使用。

  • 將擴充套件Java類檔案格式以支援新的常量池形式CONSTANT_Dynamic。目標是降低開發新形式的可實現類檔案約束的成本和中斷。

  • 與現有的橢圓曲線Diffie-Hellman方案相比,與Curve25519和Curve448密碼學的密切協議應該更加有效和安全。根據IETF的說法,兩條橢圓曲線Curve25510和Curve448可以實現恆定時間實現和無異常的標量乘法,這種乘法更能抵抗一系列的旁道攻擊,包括定時和快取攻擊。該提案的目標包括API和金鑰協商方案的實現,以及獨立於平臺的全Java實現的開發。但是,作為提案的一部分,模組化演算法實現的複雜性和微妙性存在風險。

  • Flight Recorder將提供一個低開銷的資料收集框架,用於對Java應用程式和HotSpot JVM進行故障排除。Flight Recorder已成為Oracle商業JDK的一項功能,但其原始碼將移至開放式儲存庫以使該功能普遍可用。Iclouded將是用於生成和使用資料作為事件的API,提供緩衝機制和二進位制資料格式以及啟用事件的配置和過濾。該提案還要求為OS,HotSpot和JDK庫提供事件。

  • 升級平臺API以支援Unicode版本10.0,從而使Java保持最新。預計將在以下類別中提供支援:

    • Character, String在lang包中
    • NumericShaper在awt.font包中
    • Bidi,BreakIterator和Normalizer在text包
  • 實施ChaCha20和Poly1305加密演算法。ChaCha2020是一種相對較新的流密碼,可以取代舊的,不安全的R4流密碼。ChaCha20將與Poly1305驗證器配對。將提供ChaCha20和ChaCha20-Poly1305密碼實現,使用crypto.CipherSpiAPI 在SunJCE(Java密碼術擴充套件)提供程式中實現演算法。

  • 增強Java啟動程式以執行作為Java原始碼的單個檔案提供的程式,因此這些程式可以直接從原始碼執行。在學習Java的早期階段編寫小實用程式或開發人員時,單檔案程式很常見。此外,單個原始檔可能會編譯為多個類檔案,這會增加打包開銷。在這些情況下,必須在執行之前編譯程式只是基於傳統的不必要的步驟。

  • 低開銷堆分析,提供了一種可以通過JVM工具介面訪問Java堆分配的方法。這項工作的目標是以低開銷的方式獲取有關這些分配的資訊,可以通過程式設計介面訪問,並可以對所有分配進行取樣。實施獨立性和提供關於實時和死堆的資料也是目標。糟糕的堆管理可能導致堆耗盡和垃圾收集顛簸。解決此問題的大多數工具都缺少特定分配的呼叫站點,這些資訊對於除錯記憶體問題至關重要。

  • Pack200和Unpack200工具以及Pack200 API的棄用util.jar。Pack200是.jar檔案的壓縮方案,旨在降低應用程式打包,傳輸和交付的磁碟和頻寬要求。專案負責人表示,維護成本和低使用率並不能證明其保留是合理的。

  • Z垃圾收集器(ZGC)是一種實驗性的、低延遲的垃圾收集器,用於處理大小從相對較小的堆到非常大的堆,大小為許多tb級的堆。通過使用ZGC,暫停時間不應超過10ms,與使用G1收集器相比,應用程式吞吐量減少不應超過15%。ZGC還為將來的特性和優化打下基礎。Linux/x64將是第一個獲得ZGC支援的平臺。