JDK 16:Java 16需要了解的新功能
作者:banq
可以在jdk.java.net上找到適用于Linux,Windows和MacOS的JDK 16的早期版本。與JDK 15一樣,JDK 16將是一個(gè)短期版本,支持六個(gè)月。將于2021年9月發(fā)布的JDK 17將是一個(gè)長(zhǎng)期支持(LTS)版本,將獲得數(shù)年的支持。當(dāng)前的LTS版本JDK 11已于2018年9月發(fā)布。
可以在jdk.java.net上找到適用于Linux,Windows和MacOS的JDK 16的早期版本。與JDK 15一樣,JDK 16將是一個(gè)短期版本,支持六個(gè)月。將于2021年9月發(fā)布的JDK 17將是一個(gè)長(zhǎng)期支持(LTS)版本,將獲得數(shù)年的支持。當(dāng)前的LTS版本JDK 11已于2018年9月發(fā)布。
JDK 16將作為標(biāo)準(zhǔn)Java版本的參考實(shí)現(xiàn),將在明年3月到來(lái)。
截至10月8日,八項(xiàng)提案正式針對(duì)JDK16。Java16的新功能包括:
- 將ZGC(Z垃圾收集器)線程堆棧處理從安全點(diǎn)safepoints遷移到并發(fā)階段。該計(jì)劃的目標(biāo)包括從ZGC安全點(diǎn)中刪除線程堆棧處理。使堆棧處理變得惰性,協(xié)作,并發(fā)和增量;從ZGC安全點(diǎn)刪除所有其他每線程根處理;并為其他HotSpot VM子系統(tǒng)提供了一種機(jī)制來(lái)延遲處理堆棧。這樣,ZGC使HotSpot中的GC暫停和可伸縮性問(wèn)題成為過(guò)去。到目前為止,隨著堆大小和元空間大小而擴(kuò)展的GC操作已經(jīng)從安全點(diǎn)操作中移出并進(jìn)入并發(fā)階段。這些包括標(biāo)記,重定位,參考處理,類卸載和大多數(shù)根處理。GC安全點(diǎn)中唯一仍進(jìn)行的活動(dòng)是根處理和有時(shí)間限制的標(biāo)記終止操作的子集。這些根目錄包括Java線程堆棧和其他線程根目錄,這些根目錄存在問(wèn)題,因?yàn)樗鼈冸S線程數(shù)的增長(zhǎng)而擴(kuò)展。為了超越當(dāng)前狀況,必須將包括堆棧掃描在內(nèi)的每線程處理移至并發(fā)階段。使用此計(jì)劃,改進(jìn)的延遲的吞吐成本應(yīng)該是微不足道的,并且在典型計(jì)算機(jī)上的ZGC安全點(diǎn)內(nèi)花費(fèi)的時(shí)間應(yīng)少于一毫秒。
- 彈性元空間能力,它可以將未使用的HotSpot VM類元數(shù)據(jù)(元空間)內(nèi)存更迅速地返回給操作系統(tǒng),從而減少了元空間的占用空間并簡(jiǎn)化了元空間代碼,從而降低了維護(hù)成本。元空間存在大量的堆外內(nèi)存使用問(wèn)題。該計(jì)劃要求用基于伙伴的分配方案替換現(xiàn)有的內(nèi)存分配器,提供一種將內(nèi)存劃分為多個(gè)分區(qū)以滿足內(nèi)存請(qǐng)求的算法。這種方法已在Linux內(nèi)核等地方使用,它將使在較小的塊中分配內(nèi)存以減少類加載器的開銷變得切實(shí)可行。碎片也將減少。此外,從操作系統(tǒng)到內(nèi)存管理領(lǐng)域的內(nèi)存承諾將根據(jù)需要延遲執(zhí)行,減少了從大型舞臺(tái)開始但不立即使用它們或可能未完全使用它們的裝載機(jī)的占地面積。為了充分利用伙伴分配所提供的彈性,將元空間內(nèi)存排列成大小統(tǒng)一的顆粒,這些顆粒可以彼此獨(dú)立地進(jìn)行提交和不提交。
- 啟用C ++ 14語(yǔ)言功能,以允許在JDK C ++源代碼中使用C ++ 14功能,并提供有關(guān)在HotSpot VM代碼中可以使用其中哪些功能的特定指南。通過(guò)JDK 15,JDK中C ++代碼使用的語(yǔ)言功能已限于C ++ 98/03語(yǔ)言標(biāo)準(zhǔn)。使用JDK 11,源代碼已更新,以支持使用更新版本的C ++標(biāo)準(zhǔn)進(jìn)行構(gòu)建。這包括能夠使用支持C ++ 11/14語(yǔ)言功能的最新版本的編譯器進(jìn)行構(gòu)建。本提案不建議在HotSpot之外使用的C ++代碼的樣式或用法更改。但是要利用C ++語(yǔ)言功能,需要進(jìn)行一些構(gòu)建時(shí)更改,具體取決于平臺(tái)編譯器。
- 孵化器階段的矢量API,其中JDK將裝有一個(gè)孵化器模塊,jdk.incubator.vector,以表達(dá)可在支持的CPU架構(gòu)上編譯為最佳矢量硬件指令的矢量計(jì)算,以實(shí)現(xiàn)優(yōu)于等效標(biāo)量計(jì)算的性能。向量API提供了一種使用Java編寫復(fù)雜向量算法的機(jī)制,該機(jī)制使用HotSpot VM中預(yù)先存在的支持進(jìn)行向量化,但其用戶模型使向量化更可預(yù)測(cè)且更可靠。該提案的目標(biāo)包括提供一個(gè)清晰簡(jiǎn)潔的API來(lái)表達(dá)一系列矢量計(jì)算,通過(guò)支持多種CPU架構(gòu)而與平臺(tái)無(wú)關(guān),在x64和AArch64架構(gòu)上提供可靠的運(yùn)行時(shí)編譯和性能。優(yōu)雅降級(jí)也是一個(gè)目標(biāo),
- 將JDK移植到Windows / AArch64平臺(tái)。隨著新的服務(wù)器類和消費(fèi)類AArch64(ARM64)硬件的發(fā)布,由于需求,Windows / AArch64已成為重要的平臺(tái)。盡管移植本身已經(jīng)基本完成,但該建議的重點(diǎn)是將端口集成到主線JDK存儲(chǔ)庫(kù)中。
- 在x64和AArch64體系結(jié)構(gòu)上,將JDK移植到Alpine Linux和其他使用musl作為其主要C庫(kù)的Linux發(fā)行版。Musl是ISO C和Posix標(biāo)準(zhǔn)中描述的標(biāo)準(zhǔn)庫(kù)功能的Linux實(shí)現(xiàn)。由于Alpine Linux的映像較小,因此已在云部署,微服務(wù)和容器環(huán)境中廣泛采用。Linux的Docker映像小于6MB。在這樣的設(shè)置中讓Java開箱即用地運(yùn)行,將允許Tomcat,Jetty,Spring和其他流行的框架在這些環(huán)境中本機(jī)運(yùn)行。通過(guò)使用jlink減小Java運(yùn)行時(shí)的大小,用戶可以創(chuàng)建專門為運(yùn)行特定應(yīng)用程序而定制的甚至更小的映像。
- OpenJDK源代碼庫(kù)從Mercurial遷移到Git。推動(dòng)這一努力的是版本控制系統(tǒng)元數(shù)據(jù)大小以及可用工具和托管方面的優(yōu)勢(shì)。
- 遷移到GitHub,與從Mercurial到Git的遷移有關(guān),JDK 16源代碼存儲(chǔ)庫(kù)位于流行的代碼共享站點(diǎn)上。Mercurial JDK和JDK-sandbox的向Git,GitHub和Skara的過(guò)渡已于9月5日完成,現(xiàn)已開放供稿。
責(zé)任編輯:龐桂玉
來(lái)源:
JDON