jdk10下載,JDK 10 是 Java 10 標(biāo)準(zhǔn)版,包含Java最新開(kāi)發(fā)環(huán)境jre10和java10開(kāi)發(fā)工具,jdk10改進(jìn)的關(guān)鍵點(diǎn)包括一個(gè)本地類(lèi)型推斷、一個(gè)垃圾回收的“干凈”接口。
JDK 10 的新改進(jìn)有哪些?
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ì)象堆分配給用戶指定的備用內(nèi)存設(shè)備(如 NVDIMM 內(nèi)存模塊),這個(gè)特性也側(cè)面預(yù)示了未來(lái)的系統(tǒng)可能會(huì)采用異構(gòu)的內(nèi)存架構(gòu)。
JDK10 包含 12 個(gè)JEP (改善提議):
【286】局部變量類(lèi)型推斷 :對(duì)于開(kāi)發(fā)者來(lái)說(shuō),這是 JDK10 唯一的真正特性。它向 Java 中引入在其他語(yǔ)言中很常見(jiàn)的 var ,比如 JavaScript 。只要編譯器可以推斷此種類(lèi)型,你不再需要專(zhuān)門(mén)聲明一個(gè)局部變量的類(lèi)型。一個(gè)簡(jiǎn)單的例子是:
var x = new ArrayList<String>();
這就消除了我們之前必須執(zhí)行的 ArrayList<String> 類(lèi)型定義的重復(fù)。我鼓勵(lì)你們?nèi)プx JEP ,因?yàn)樯厦嬗幸恍╆P(guān)于這個(gè)句法是否能用的規(guī)則。
有趣的是,需要注意 var 不能成為一個(gè)關(guān)鍵字,而是一個(gè)保留字。這意味著你仍然可以使用 var 作為一個(gè)變量,方法或包名,但是現(xiàn)在(盡管我確定你絕不會(huì))你不能再有一個(gè)類(lèi)被調(diào)用。
[310]應(yīng)用類(lèi)數(shù)據(jù)共享(CDS) :CDS 在 JDK5 時(shí)被引進(jìn)以改善 JVM 啟動(dòng)的表現(xiàn),同時(shí)減少當(dāng)多個(gè)虛擬機(jī)在同一個(gè)物理或虛擬的機(jī)器上運(yùn)行時(shí)的資源占用。
JDK10 將擴(kuò)展 CDS 到允許內(nèi)部系統(tǒng)的類(lèi)加載器、內(nèi)部平臺(tái)的類(lèi)加載器和自定義類(lèi)加載器來(lái)加載獲得的類(lèi)。之前,CDS 的使用僅僅限制在了 bootstrap 的類(lèi)加載器。
[314]額外的 Unicode 語(yǔ)言標(biāo)簽擴(kuò)展:這將改善 java.util.Locale 類(lèi)和相關(guān)的 API 以實(shí)現(xiàn)額外 BCP 47 語(yǔ)言標(biāo)簽的 Unicode 擴(kuò)展。尤其是,貨幣類(lèi)型,一周的第一天,區(qū)域覆蓋和時(shí)區(qū)等標(biāo)簽現(xiàn)在將被支持。
[322]基于時(shí)間的版本控制:正如我在之前的博客中所討論的,我們的 JDK 版本字符串格式幾乎與 JDK 版本一樣多。有幸的是,這是最后需要使用到的,我們可以堅(jiān)持用它。這種格式使用起來(lái)很像 JDK9 中介紹的提供一個(gè)更加語(yǔ)義的形式。有一件困擾我的事是包含了一個(gè) INTERIM 元素,正如 JEP 提議中所說(shuō),“永遠(yuǎn)是0”。好吧,如果永遠(yuǎn)是0,那它有什么意義呢?他們說(shuō)這是為未來(lái)使用做保留,但我仍不是很贊同。我認(rèn)為,這有些冗余繁雜。
這也消除了在 JDK9 中有過(guò)的相當(dāng)奇怪的情形。第一次更新是 JDK 9.0.1 , 非常符合邏輯。第二次更新是 JDK 9.0.4 ,不合邏輯。原因是,在 JDK9 的版本計(jì)數(shù)模式下,需要留下空白以便應(yīng)急或不在預(yù)期安排的更新使用。但既然沒(méi)有更新是必須的,為什么不簡(jiǎn)單稱(chēng)之為 JDK 9.0.2 呢?
[319]根證書(shū):在 JDK 中將提供一套默認(rèn)的 CA 根證書(shū)。關(guān)鍵的安全部件,如 TLS ,在 OpenJDK 構(gòu)建中將默認(rèn)有效。這是 Oracle 正在努力確保 OpenJDK 二進(jìn)制和 Oracle JDK 二進(jìn)制功能上一樣的工作的一部分,是一項(xiàng)有用的補(bǔ)充內(nèi)容。
[307] 并行全垃圾回收器 G1 : G1 是設(shè)計(jì)來(lái)作為一種低延時(shí)的垃圾回收器(但是如果它跟不上舊的堆碎片產(chǎn)生的提升速率的話,將仍然采用完整壓縮集合)。在 JDK9 之前,默認(rèn)的收集器是并行,吞吐,收集器。為了減少在使用默認(rèn)的收集器的應(yīng)用性能配置文件的差異,G1 現(xiàn)在有一個(gè)并行完整收集機(jī)制。
[313]移除 Native-Header 自動(dòng)生成工具:Java9 開(kāi)始了一些對(duì) JDK 的家務(wù)管理,這項(xiàng)特性是對(duì)它的延續(xù)。當(dāng)編譯 JNI 代碼時(shí),已不再需要單獨(dú)的工具來(lái)生成頭文件,因?yàn)檫@可以通過(guò) javac 完成。在未來(lái)的某一時(shí)刻,JNI 將會(huì)被 Panama 項(xiàng)目的結(jié)果取代,但是何時(shí)發(fā)生還不清楚。
[304]垃圾回收器接口: 這不是讓開(kāi)發(fā)者用來(lái)控制垃圾回收的接口;而是一個(gè)在 JVM 源代碼中的允許另外的垃圾回收器快速方便的集成的接口。
[312]線程-局部變量管控:這是在 JVM 內(nèi)部相當(dāng)?shù)图?jí)別的更改,現(xiàn)在將允許在不運(yùn)行全局虛擬機(jī)安全點(diǎn)的情況下實(shí)現(xiàn)線程回調(diào)。這將使得停止單個(gè)線程變得可能和便宜,而不是只能啟用或停止所有線程。
[316]在備用存儲(chǔ)裝置上的堆分配:硬件技術(shù)在持續(xù)進(jìn)化,現(xiàn)在可以使用與傳統(tǒng) DRAM 具有相同接口和類(lèi)似性能特點(diǎn)的非易失性 RAM 。這項(xiàng) JEP 將使得 JVM 能夠使用適用于不同類(lèi)型的存儲(chǔ)機(jī)制的堆。
[317] 試驗(yàn)性的基于 Java 的 JIT 編譯器:最近宣布的 Metropolis 項(xiàng)目,提議用 Java 重寫(xiě)大部分 JVM 。乍一想,覺(jué)得很奇怪。如果 JVM 是用 Java 編寫(xiě)的,那么是否需要一個(gè) JVM 來(lái)運(yùn)行 JVM ? 相應(yīng)的,這導(dǎo)致了一個(gè)很好的鏡像類(lèi)比。 現(xiàn)實(shí)情況是,使用 Java 編寫(xiě) JVM 并不意味著必須將其編譯為字節(jié)碼,你可以使用 AOT 編譯,然后在運(yùn)行時(shí)編譯代碼以提高性能。
這項(xiàng) JEP 將 Graal 編譯器研究項(xiàng)目引入到 JDK 中。并給將 Metropolis 項(xiàng)目成為現(xiàn)實(shí),使 JVM 性能與當(dāng)前 C++ 所寫(xiě)版本匹敵(或有幸超越)提供基礎(chǔ)。
[296]: 合并 JDK 多個(gè)代碼倉(cāng)庫(kù)到一個(gè)單獨(dú)的儲(chǔ)存庫(kù)中:在 JDK9 中,有 8 個(gè)倉(cāng)庫(kù): root、corba、hotspot、jaxp、jaxws、jdk、langtools 和 nashorn 。在 JDK10 中這些將被合并為一個(gè),使得跨相互依賴的變更集的存儲(chǔ)庫(kù)運(yùn)行 atomic commit (原子提交)成為可能。
jdk10 安裝:
點(diǎn)擊安裝包安裝,需要注意的是,選擇安裝目錄,不要選到C盤(pán)。推薦使用像我這種目錄風(fēng)格,比如
D:\JDK\10
以便多JDK共存。
同時(shí)取消勾選JRE安裝,因?yàn)镴DK從來(lái)都是包含JRE的,一般沒(méi)有必要再獨(dú)立安裝一個(gè)JRE浪費(fèi)硬盤(pán)。
配置環(huán)境變量
進(jìn)入電腦的系統(tǒng)環(huán)境變量設(shè)置頁(yè)面,win10系統(tǒng)直接在左下角搜索"環(huán)境變量"即可
在系統(tǒng)環(huán)境變量中新建一個(gè)JAVA_HOME環(huán)境變量,目錄選擇JDK10的安裝目錄如
D:\JDK\10
保存
在Path變量中,增加一個(gè)
%JAVA_HOME%\bin
變量,記得讓這個(gè)變量處于第一個(gè)位置,這樣可以讓它優(yōu)先級(jí)最高,防止安裝在C盤(pán)的其它JRE和它沖突。
進(jìn)入cmd命令提示符,win10系統(tǒng)可以在左下角搜索cmd,回車(chē)進(jìn)入。
輸入
java -version
可以查看當(dāng)前JAVA版本
輸入
where java
可以查看java命令來(lái)源的目錄,如果配置正確的話,JDK10的安裝目錄,應(yīng)該是第一行輸出。我這里第二個(gè)是C盤(pán)安裝了一個(gè)JRE。如果在PATH變量中,
%JAVA_HOME%\bin
的位置在最后了,可能就會(huì)被這個(gè)JRE覆蓋,導(dǎo)致輸出版本不是自己預(yù)期的。