JDK 16:Java 16的新功能 - InfoWorld

banq發表於2020-10-10

可以在jdk.java.net上找到適用於Linux,Windows和MacOS的JDK 16的早期版本。與JDK 15一樣,JDK 16將是一個短期版本,支援六個月。將於2021年9月釋出的JDK 17將是一個長期支援(LTS)版本,將獲得數年的支援。當前的LTS版本JDK 11已於2018年9月釋出。
JDK 16將作為標準Java版本的參考實現,將在明年3月到來。
截至10月8日,八項提案正式針對JDK16。Java16的新功能包括:
  • ZGC(Z垃圾收集器)執行緒堆疊處理從安全點safepoints遷移到併發階段。該計劃的目標包括從ZGC安全點中刪除執行緒堆疊處理。使堆疊處理變得惰性,協作,併發和增量;從ZGC安全點刪除所有其他每執行緒根處理;併為其他HotSpot VM子系統提供了一種機制來延遲處理堆疊。這樣,ZGC使HotSpot中的GC暫停和可伸縮性問題成為過去。到目前為止,隨著堆大小和元空間大小而擴充套件的GC操作已經從安全點操作中移出並進入併發階段。這些包括標記,重定位,參考處理,類解除安裝和大多數根處理。GC安全點中唯一仍進行的活動是根處理和有時間限制的標記終止操作的子集。這些根目錄包括Java執行緒堆疊和其他執行緒根目錄,這些根目錄存在問題,因為它們隨執行緒數的增長而擴充套件。為了超越當前狀況,必須將包括堆疊掃描在內的每執行緒處理移至併發階段。使用此計劃,改進的延遲的吞吐成本應該是微不足道的,並且在典型計算機上的ZGC安全點內花費的時間應少於一毫秒。
  • 彈性元空間能力,它可以將未使用的HotSpot VM類後設資料(元空間)記憶體更迅速地返回給作業系統,從而減少了元空間的佔用空間並簡化了元空間程式碼,從而降低了維護成本。元空間存在大量的堆外記憶體使用問題。該計劃要求用基於夥伴的分配方案替換現有的記憶體分配器,提供一種將記憶體劃分為多個分割槽以滿足記憶體請求的演算法。這種方法已在Linux核心等地方使用,它將使在較小的塊中分配記憶體以減少類載入器的開銷變得切實可行。碎片也將減少。此外,從作業系統到記憶體管理領域的記憶體承諾將根據需要延遲執行,減少了從大型舞臺開始但不立即使用它們或可能未完全使用它們的裝載機的佔地面積。為了充分利用夥伴分配所提供的彈性,將元空間記憶體排列成大小統一的顆粒,這些顆粒可以彼此獨立地進行提交和不提交。
  • 啟用C ++ 14語言功能,以允許在JDK C ++原始碼中使用C ++ 14功能,並提供有關在HotSpot VM程式碼中可以使用其中哪些功能的特定指南。透過JDK 15,JDK中C ++程式碼使用的語言功能已限於C ++ 98/03語言標準。使用JDK 11,原始碼已更新,以支援使用更新版本的C ++標準進行構建。這包括能夠使用支援C ++ 11/14語言功能的最新版本的編譯器進行構建。本提案不建議在HotSpot之外使用的C ++程式碼的樣式或用法更改。但是要利用C ++語言功能,需要進行一些構建時更改,具體取決於平臺編譯器。
  • 孵化器階段的向量API,其中JDK將裝有一個孵化器模組,jdk.incubator.vector,以表達可在支援的CPU架構上編譯為最佳向量硬體指令的向量計算,以實現優於等效標量計算的效能。向量API提供了一種使用Java編寫複雜向量演算法的機制,該機制使用HotSpot VM中預先存在的支援進行向量化,但其使用者模型使向量化更可預測且更可靠。該提案的目標包括提供一個清晰簡潔的API來表達一系列向量計算,透過支援多種CPU架構而與平臺無關,在x64和AArch64架構上提供可靠的執行時編譯和效能。優雅降級也是一個目標,
  • 將JDK移植到Windows / AArch64平臺。隨著新的伺服器類和消費類AArch64(ARM64)硬體的釋出,由於需求,Windows / AArch64已成為重要的平臺。儘管移植本身已經基本完成,但該建議的重點是將埠整合到主線JDK儲存庫中。
  • 在x64和AArch64體系結構上,將JDK移植到Alpine Linux和其他使用musl作為其主要C庫的Linux發行版。Musl是ISO C和Posix標準中描述的標準庫功能的Linux實現。由於Alpine Linux的映像較小,因此已在雲部署,微服務和容器環境中廣泛採用。Linux的Docker映像小於6MB。在這樣的設定中讓Java開箱即用地執行,將允許Tomcat,Jetty,Spring和其他流行的框架在這​​些環境中本機執行。透過使用jlink減小Java執行時的大小,使用者可以建立專門為執行特定應用程式而定製的甚至更小的映像。
  • OpenJDK原始碼庫從Mercurial遷移到Git。推動這一努力的是版本控制系統後設資料大小以及可用工具和託管方面的優勢。
  • 遷移到GitHub,與從Mercurial到Git的遷移有關,JDK 16原始碼儲存庫位於流行的程式碼共享站點上。Mercurial JDK和JDK-sandbox的向Git,GitHub和Skara的過渡已於9月5日完成,現已開放供稿。  


 

相關文章