摘要:目標(biāo)發(fā)布目前有兩個(gè)主要功能針對(duì)局部變量類(lèi)型推斷這將刪除大部分對(duì)象實(shí)例化所需的冗長(zhǎng)的包含手動(dòng)類(lèi)型信息整合源樹(shù)的庫(kù)即不同的庫(kù)將被合并成一個(gè)單一的存儲(chǔ)庫(kù)。特別是,承諾為局部變量實(shí)例化引入類(lèi)型推斷機(jī)制,并將現(xiàn)有的存儲(chǔ)庫(kù)合并到一個(gè)存儲(chǔ)庫(kù)中。
JDK 10 何時(shí)發(fā)布?
JDK 10 是 Java 10 標(biāo)準(zhǔn)版的部分實(shí)現(xiàn),將于 2018 年 3 月 20 日發(fā)布,改進(jìn)的關(guān)鍵點(diǎn)包括一個(gè)本地類(lèi)型推斷、一個(gè)垃圾回收的“干凈”接口。
Oracle 已經(jīng)為 Java 設(shè)定了六個(gè)月的發(fā)行計(jì)劃。之前本打算根據(jù)發(fā)行的年份和月份命名升級(jí)版和后續(xù)版,這樣的話第一個(gè)版本就會(huì)被稱(chēng)為 Java 18.3, 但這個(gè)計(jì)劃后來(lái)被中止了。
如何下載 JDK 10?
用戶(hù)要先加入早期使用者計(jì)劃,然后才可以下載 JDK 10 測(cè)試版
用戶(hù)要先加入早期使用者計(jì)劃,然后才可以下載 JDK 10 測(cè)試版
http://jdk.java.net/10/
OpenJDK https://download.java.net/java/jdk10/archive/45/GPL/openjdk-10+45_linux-x64_bin.tar.gz
Oracle JDK https://download.java.net/java/jdk10/archive/45/BCL/jdk-10+45_linux-x64_bin.tar.gz
JDK 10 的主要功能包括:一個(gè)局部變量類(lèi)型推斷,通過(guò)增強(qiáng)語(yǔ)言特性將類(lèi)型推斷擴(kuò)展到局部變量,目的是減少與編碼相關(guān)的“儀式”,同時(shí)保持對(duì)靜態(tài)類(lèi)型的安全承諾。
一個(gè)干凈的垃圾收集器接口,用來(lái)改善垃圾收集器源代碼之間的隔離效果,這樣可以為HotSpot 虛擬機(jī)中的內(nèi)部垃圾收集代碼提供更好的模塊化功能,也可以更容易向 HotSpot 添加新的垃圾收集器。
并行、完整的 G1 垃圾收集器,通過(guò)實(shí)現(xiàn)并行性來(lái)改善最壞情況下的延遲問(wèn)題。
啟用 HotSpot 將對(duì)象堆分配給用戶(hù)指定的備用內(nèi)存設(shè)備(如 NVDIMM 內(nèi)存模塊),這個(gè)特性也側(cè)面預(yù)示了未來(lái)的系統(tǒng)可能會(huì)采用異構(gòu)的內(nèi)存架構(gòu)。
在 Linux / x64 平臺(tái)上以實(shí)驗(yàn)性方式啟用基于 Java 的即時(shí)編譯器(https://www.infoworld.com/art...)。
將 JDK 的多個(gè)存儲(chǔ)庫(kù)合并成一個(gè),簡(jiǎn)化開(kāi)發(fā)。目前的代碼庫(kù)被分解成了多個(gè)庫(kù),容易出現(xiàn)源代碼的管理問(wèn)題。
應(yīng)用程序數(shù)據(jù)共享,通過(guò)跨進(jìn)程共享通用類(lèi)的元數(shù)據(jù),減少空間占用及啟動(dòng)時(shí)長(zhǎng)。
線程本地握手,不執(zhí)行全局 VM 安全點(diǎn)也能對(duì)線程執(zhí)行回調(diào),同時(shí)實(shí)現(xiàn)單線程停止回調(diào)。
JDK 提供了一組默認(rèn)證書(shū),開(kāi)源 Java SE 的 CA程序,對(duì)開(kāi)發(fā)人員更具吸引力。
新功能與之前的JDK版本一樣,對(duì)于即將到來(lái)的JDK 10也有一些主要特性。這些特性可以分為兩個(gè)主要類(lèi)別:(1)目標(biāo)發(fā)布,(2)建議發(fā)布。前者表示某些特性已計(jì)劃在JDK 10中發(fā)布,后一種類(lèi)型表示這些特性還需要增加支持和成熟度。一旦條件允許,它就可以升級(jí)為一個(gè)目標(biāo)發(fā)布狀態(tài)。
目標(biāo)發(fā)布目前有兩個(gè)主要功能針對(duì)JDK 10:
局部變量類(lèi)型推斷,這將刪除大部分對(duì)象實(shí)例化所需的冗長(zhǎng)的包含手動(dòng)類(lèi)型信息
整合源樹(shù)source tree的JDK庫(kù),即不同的JDK庫(kù)將被合并成一個(gè)單一的存儲(chǔ)庫(kù)。
1. 局部變量類(lèi)型推斷
強(qiáng)類(lèi)型編程語(yǔ)言有很多優(yōu)點(diǎn),包括在編譯時(shí)發(fā)現(xiàn)類(lèi)型錯(cuò)誤,但是它們也引入了大量的樣板代碼,特別是在定義局部變量時(shí)。例如,當(dāng)我們希望實(shí)例化一個(gè)對(duì)象時(shí),我們被迫在賦值的左側(cè)提供顯式類(lèi)型,并在賦值的右邊提供實(shí)現(xiàn)類(lèi)型,如下面的片段所示:
MyObject value = new MyObject();
但是,當(dāng)這個(gè)過(guò)程重復(fù)出現(xiàn)大量任務(wù)時(shí),對(duì)象實(shí)例化可能變得令人沮喪和乏味。許多最流行的強(qiáng)類(lèi)型的編程語(yǔ)言,比如C++, C#以及Go,在定義過(guò)程中,提供一種局部變量類(lèi)型推斷的功能(例如C++提供了auto 關(guān)鍵字,C#提供var關(guān)鍵字)。但是,Java仍缺乏這樣的功能,它要求開(kāi)發(fā)人員顯式聲明變量的預(yù)期清單類(lèi)型。
為了解決這個(gè)問(wèn)題,Java開(kāi)發(fā)工具包(JDK)改進(jìn)建議(JEP)286提出了一個(gè)上下文敏感的關(guān)鍵字var,允許局部變量被以下方式初始化:
var value = new MyObject(); var list = new ArrayList();
但是,當(dāng)這個(gè)過(guò)程重復(fù)出現(xiàn)大量任務(wù)時(shí),對(duì)象實(shí)例化可能變得令人沮喪和乏味。許多最流行的強(qiáng)類(lèi)型的編程語(yǔ)言,比如C++, C#以及Go,在定義過(guò)程中,提供一種局部變量類(lèi)型推斷的功能(例如C++提供了auto 關(guān)鍵字,C#提供var關(guān)鍵字)。但是,Java仍缺乏這樣的功能,它要求開(kāi)發(fā)人員顯式聲明變量的預(yù)期清單類(lèi)型。
為了解決這個(gè)問(wèn)題,Java開(kāi)發(fā)工具包(JDK)改進(jìn)建議(JEP)286提出了一個(gè)上下文敏感的關(guān)鍵字var,允許局部變量被以下方式初始化:
var value = new MyObject(); var list = new ArrayList();
由于var關(guān)鍵字是上下文敏感的,它的使用有下面的規(guī)則定義:
代碼使用var作為一個(gè)變量、方法或包名稱(chēng)時(shí)將不受影響;而使用var作為類(lèi)或接口名稱(chēng)的代碼將受到影響。
同樣,類(lèi)型推斷將受到以下方式的約束:
推斷類(lèi)型將被限制在局部變量的初始化,增強(qiáng)的for循環(huán)索引,以及傳統(tǒng)的for循環(huán)中聲明;它(將)不用于方法形式、構(gòu)造函數(shù)形式、方法返回類(lèi)型、字段、捕獲形式,或任何其他類(lèi)型的變量聲明。
考慮到所有的限制和細(xì)微差別,這個(gè)特性將有助于在開(kāi)發(fā)人員創(chuàng)建的應(yīng)用程序Java代碼中減輕大量的單調(diào)無(wú)聊的動(dòng)作,并簡(jiǎn)化JDK代碼庫(kù)。更多信息可以在官方的JEP 286規(guī)范中找到。
2. 整合的JDK庫(kù)
目前,有8個(gè)不同的Mercurial存儲(chǔ)庫(kù)用于存儲(chǔ)包含JDK的大量源代碼:
root corba hotspot jaxp jaxws JDK langtools nashorn
雖然過(guò)多的存儲(chǔ)庫(kù)提供了對(duì)組成JDK的各種組件并清晰分離,但管理多個(gè)存儲(chǔ)庫(kù)存在一些主要的缺點(diǎn)。
其中最重要的一點(diǎn)是,在JDK的兩個(gè)不同部分,單個(gè)錯(cuò)誤修復(fù)程序不能被原子跟蹤。例如,如果一個(gè)bug修復(fù)需要對(duì)獨(dú)立存儲(chǔ)庫(kù)中包含的系統(tǒng)的兩個(gè)部分進(jìn)行更改,那么必須提交兩個(gè)提交:每個(gè)存儲(chǔ)庫(kù)中一個(gè)。這種不連續(xù)性很容易地降低項(xiàng)目和源代碼管理工具的可跟蹤性和復(fù)雜性。
為了解決這個(gè)問(wèn)題,JEP 296建議將所有現(xiàn)有存儲(chǔ)庫(kù)合并到一個(gè)Mercurial存儲(chǔ)庫(kù)中。這種合并的一個(gè)次生效應(yīng)是,這個(gè)單一的Mercurial存儲(chǔ)庫(kù)比現(xiàn)有的8個(gè)存儲(chǔ)庫(kù)要更容易的被鏡像(作為一個(gè)Git存儲(chǔ)庫(kù))。
雖然在這個(gè)整合過(guò)程中,外部開(kāi)發(fā)人員有一些阻力,但是JDK開(kāi)發(fā)團(tuán)隊(duì)似乎已經(jīng)致力于使這一更改成為JDK 10的一部分。有關(guān)更多信息,請(qǐng)參見(jiàn)JEP 296,并提議整合由Michael Redlich發(fā)布的JDK 10 OpenJDK Mercurial存儲(chǔ)庫(kù)聲明。
建議發(fā)布除了兩個(gè)目標(biāo)特性之外,JDK 10目前還有三個(gè)建議,其中兩個(gè)主要是對(duì)JDK的垃圾收集器部分進(jìn)行升級(jí),另一個(gè)側(cè)重于對(duì)JDK的本地線程功能進(jìn)行升級(jí)。
1 .清理垃圾收集接口
在當(dāng)前的JDK結(jié)構(gòu)中,組成垃圾收集器(GC)實(shí)現(xiàn)的組件分散在代碼庫(kù)的各個(gè)部分。盡管這些慣例對(duì)于使用GC計(jì)劃的JDK開(kāi)發(fā)者比較熟悉,但對(duì)新的開(kāi)發(fā)人員來(lái)說(shuō),對(duì)于特定GC的源代碼,或者創(chuàng)建一個(gè)新的GC常常會(huì)感到困惑。更重要的是,隨著Java modules的出現(xiàn),我們希望在構(gòu)建過(guò)程中排除不需要的GC,但是GC接口的當(dāng)前橫切結(jié)構(gòu)排除了這種增強(qiáng)。
JEP 304被設(shè)計(jì)為解決此問(wèn)題的方案,并建議整合并清理GC接口,以便更容易地實(shí)現(xiàn)新的GC,并更好地維護(hù)現(xiàn)有的GC。本建議完成后,GC執(zhí)行將負(fù)責(zé)提供以下內(nèi)容:
heap,CollectedHeap的子類(lèi)
barrier set,BarrierSet的子類(lèi),它實(shí)現(xiàn)了運(yùn)行時(shí)的各種障礙
一個(gè)CollectorPolicy的實(shí)現(xiàn)
GCInterpreterSupport的實(shí)現(xiàn),它實(shí)現(xiàn)了解釋器的GC的各種障礙(使用匯編指令)
GCC1Support的實(shí)現(xiàn),它為C1編譯器實(shí)現(xiàn)了GC的各種障礙
GCC2Support的實(shí)現(xiàn),它為C2編譯器實(shí)現(xiàn)了GC的各種障礙
最終GC特定參數(shù)的初始化
設(shè)置MemoryService、相關(guān)的內(nèi)存池、內(nèi)存管理器等。
有關(guān)這些更改的更多信息,請(qǐng)參見(jiàn)JEP 304規(guī)范;有關(guān)Java GC的更多信息,請(qǐng)參閱Oracle提供的垃圾收集器基礎(chǔ)指南。
2. G1垃圾收集器并行化
隨著JDK 9的發(fā)布,Garbage-First(G1)GC取代了Parallel Collector作為默認(rèn)GC。為了減少JDK 9之外的JDK版本中垃圾收集的影響,G1收集器將被并行化(以匹配并行收集器的特征)。雖然目前還沒(méi)有關(guān)于這個(gè)并行化的實(shí)現(xiàn)細(xì)節(jié)的信息,但是可以在JEP 307規(guī)范中找到關(guān)于此更改的更多細(xì)節(jié)。
有關(guān)GC實(shí)現(xiàn)的更多信息,請(qǐng)參閱Oracle的G1指南和并行收集器指南。
3. 項(xiàng)目線程局部握手
當(dāng)前,停止Java線程是一個(gè)“全部或沒(méi)有”的過(guò)程,需要一個(gè)Java虛擬機(jī)(JVM)的安全點(diǎn),以使一個(gè)線程停止。為了讓多帶帶的線程停止,JEP 312提議將回調(diào)包含到線程中。這一更改受到了限制,因?yàn)樗@著地提高了現(xiàn)有JVM功能的性能開(kāi)銷(xiāo),并且改變了到達(dá)JVM全局安全點(diǎn)的現(xiàn)有時(shí)間語(yǔ)義。有關(guān)這個(gè)建議的更多信息,請(qǐng)參閱JEP 312的Thread-Local Handshake OpenJDK討論。
結(jié)論
盡管JDK 9對(duì)于許多Java開(kāi)發(fā)人員非常新鮮,但它的發(fā)展并沒(méi)有停止。特別是,JDK 10承諾為局部變量實(shí)例化引入類(lèi)型推斷機(jī)制,并將現(xiàn)有的JDK存儲(chǔ)庫(kù)合并到一個(gè)Mercurial存儲(chǔ)庫(kù)中。
此外,在更成熟和更支持的情況下,JDK 10還可能包括一些重要的升級(jí)到GC接口和默認(rèn)的GC實(shí)現(xiàn),以及升級(jí)到JVM中單個(gè)線程的可尋址能力。雖然JDK 10的發(fā)布在未來(lái)仍然相對(duì)較遠(yuǎn),而且包含的特性很可能會(huì)成為Java時(shí)間軸上的一個(gè)重要里程碑。
來(lái)源:CodeBay :http://codebay.cn/post/6349.html
Contact作者:鵬磊
出處:http://www.ymq.io
版權(quán)歸作者所有,轉(zhuǎn)載請(qǐng)注明出處
Wechat:關(guān)注公眾號(hào),搜云庫(kù),專(zhuān)注于開(kāi)發(fā)技術(shù)的研究與知識(shí)分享
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/68713.html
摘要:今天整理了一下近大半年以來(lái)的一些文章,和我的預(yù)期一樣,很多文章我都忘記自己曾經(jīng)寫(xiě)過(guò)了,這個(gè)記錄的過(guò)程讓我也有了新的理解。希望大家,收藏,點(diǎn)贊,加轉(zhuǎn)發(fā)。 今天整理了一下近大半年以來(lái)的一些文章,和我的預(yù)期一樣,很多文章我都忘記自己曾經(jīng)寫(xiě)過(guò)了,這個(gè)記錄的過(guò)程讓我也有了新的理解。希望大家,收藏,點(diǎn)贊,加轉(zhuǎn)發(fā)。 面試必備 面試必備:深入Spring MVC DispatchServlet 源碼...
摘要:今天整理了一下近大半年以來(lái)的一些文章,和我的預(yù)期一樣,很多文章我都忘記自己曾經(jīng)寫(xiě)過(guò)了,這個(gè)記錄的過(guò)程讓我也有了新的理解。希望大家,收藏,點(diǎn)贊,加轉(zhuǎn)發(fā)。 今天整理了一下近大半年以來(lái)的一些文章,和我的預(yù)期一樣,很多文章我都忘記自己曾經(jīng)寫(xiě)過(guò)了,這個(gè)記錄的過(guò)程讓我也有了新的理解。希望大家,收藏,點(diǎn)贊,加轉(zhuǎn)發(fā)。 面試必備 面試必備:深入Spring MVC DispatchServlet 源碼...
摘要:就在前段時(shí)間,官方宣布正式發(fā)布,可在生產(chǎn)環(huán)境中使用這無(wú)疑對(duì)我們來(lái)說(shuō)是一大好的消息。途中列舉了的正式發(fā)布時(shí)間以及支持計(jì)劃。長(zhǎng)期支持,表示會(huì)對(duì)其做長(zhǎng)期的補(bǔ)丁安全等擴(kuò)展支持等。 showImg(https://segmentfault.com/img/remote/1460000016796660); 就在前段時(shí)間,Oracle 官方宣布 Java 11 (18.9 LTS) 正式發(fā)布,可在...
摘要:于是抽時(shí)間看了看以后各個(gè)版本的特性,做了一個(gè)總結(jié)。年和公開(kāi)版本發(fā)布,取名為。此后對(duì)應(yīng)版本就是,。發(fā)布,是一個(gè)重大版本更新。在此之后,就是每六個(gè)月發(fā)布一次新版本。以上和參考資料聊了一些關(guān)于的歷史,下面我們看看各個(gè)版本有那些新特性。 【這是 ZY 第 11 篇原創(chuàng)技術(shù)文章】 某天在網(wǎng)上閑逛,突然看到有篇介紹 Java 11 新特性的文章,頓時(shí)心里一驚,畢竟我對(duì)于 Java 的版本認(rèn)識(shí)...
閱讀 3687·2021-11-23 09:51
閱讀 1685·2021-10-22 09:53
閱讀 1362·2021-10-09 09:56
閱讀 868·2019-08-30 13:47
閱讀 2165·2019-08-30 12:55
閱讀 1611·2019-08-30 12:46
閱讀 1125·2019-08-30 10:51
閱讀 2422·2019-08-29 12:43