人妻少妇乱子伦精品_日韩人妻潮喷视频网站_日本最新最全无码不卡免费_日韩AV无码中文

當(dāng)前位置: 首頁(yè) > 科技新聞 >

Java 9 ← 2017,2019 → Java 13,Java 兩年來(lái)都經(jīng)歷了

時(shí)間:2019-12-01 00:19來(lái)源:網(wǎng)絡(luò)整理 瀏覽:
作者 | Hollis責(zé)編 | maozz出品 | CSDN 博客距離 2019 年結(jié)束,只剩下 35 天了。你做好準(zhǔn)備迎接 2020 年了

作者 | Hollis

責(zé)編 | maozz

出品 | CSDN 博客

距離 2019 年結(jié)束,只剩下 35 天了。你做好準(zhǔn)備迎接 2020 年了嗎?

一到年底,人就特別容易陷入回憶和比較之中,比如說(shuō)這幾天, 的對(duì)比挑戰(zhàn)就火了!

?這個(gè)話題登上了微博的熱搜榜,也刷爆了朋友圈,人們紛紛曬出自己2017和2019的照片對(duì)比。

作為一個(gè)技術(shù)宅,我也做了一個(gè)對(duì)比:

?2017 年 9 月 21 日,Java 9 正式發(fā)布,并且在2017年8月,JCP執(zhí)行委員會(huì)提出將Java的發(fā)布頻率改為每六個(gè)月一次,新的發(fā)布周期嚴(yán)格遵循時(shí)間點(diǎn),將在每年的3月份和9月份發(fā)布。

歷任JDK對(duì)比

1、Java 9

Java 9 于 2017 年 9 月 22 日正式發(fā)布,帶來(lái)了很多新特性,其中最主要的變化是已經(jīng)實(shí)現(xiàn)的模塊化系統(tǒng)。

主要特性:

模塊系統(tǒng):模塊是一個(gè)包的容器,Java 9 最大的變化之一是引入了模塊系統(tǒng)(Jigsaw 項(xiàng)目)。

HTTP 2 客戶端HTTP/2標(biāo)準(zhǔn)是HTTP協(xié)議的最新版本,新的 HTTPClient API 支持 WebSocket 和 HTTP2 流以及服務(wù)器推送特性。

改進(jìn)的 Javadoc:Javadoc 現(xiàn)在支持在 API 文檔中的進(jìn)行搜索。另外,Javadoc 的輸出現(xiàn)在符合兼容 HTML5 標(biāo)準(zhǔn)。

集合工廠方法:List,Set 和 Map 接口中,新的靜態(tài)工廠方法可以創(chuàng)建這些集合的不可變實(shí)例。

私有接口方法:在接口中使用private私有方法。我們可以使用 private 訪問(wèn)修飾符在接口中編寫(xiě)私有方法。

改進(jìn)的 Stream API:改進(jìn)的 Stream API 添加了一些便利的方法,使流處理更容易,并使用收集器編寫(xiě)復(fù)雜的查詢。

改進(jìn) try-with-resources:如果你已經(jīng)有一個(gè)資源是 final 或等效于 final 變量,您可以在 try-with-resources 語(yǔ)句中使用該變量,而無(wú)需在 try-with-resources 語(yǔ)句中聲明一個(gè)新變量。

改進(jìn)的棄用注解 @Deprecated:注解 @Deprecated 可以標(biāo)記 Java API 狀態(tài),可以表示被標(biāo)記的 API 將會(huì)被移除,或者已經(jīng)破壞。

改進(jìn) Optional 類:java.util.Optional 添加了很多新的有用方法,Optional 可以直接轉(zhuǎn)為 stream。

響應(yīng)式流(Reactive Streams) API: Java 9中引入了新的響應(yīng)式流 API 來(lái)支持 Java 9 中的響應(yīng)式編程。

2、Java 10

Java 10于 2018 年3 月21 日正式發(fā)布,這是作為當(dāng)今使用最廣泛的編程語(yǔ)言之一的Java 語(yǔ)言的第十個(gè)大版本。

?主要特性:

局部變量類型推斷(Local-Variable Type Inference):使用var關(guān)鍵字進(jìn)行變量聲明,可以進(jìn)行變量類型的推斷。

G1的并行Full GC(Parallel Full GC for G1):G1 垃圾回收器的并行完整垃圾回收,實(shí)現(xiàn)并行性來(lái)改善最壞情況下的延遲。

應(yīng)用程序類數(shù)據(jù)共享(Application Class-Data Sharing):應(yīng)用程序類數(shù)據(jù) (AppCDS) 共享,通過(guò)跨進(jìn)程共享通用類元數(shù)據(jù)來(lái)減少內(nèi)存占用空間,和減少啟動(dòng)時(shí)間。

ThreadLocal握手機(jī)制(Thread-Local Handshakes):在不進(jìn)入到全局 JVM 安全點(diǎn) (Safepoint) 的情況下,對(duì)線程執(zhí)行回調(diào)。優(yōu)化可以只停止單個(gè)線程,而不是停全部線程或一個(gè)都不停。

3、Java 11

Java 11 于 2018 年9 月25 日正式發(fā)布,可在生產(chǎn)環(huán)境中使用!這是自 Java 8 后的首個(gè)長(zhǎng)期支持版本,將支持到2026年。

?主要特性:

ZGC,可擴(kuò)展的低延遲垃圾收集器(ZGC: A Scalable Low-Latency Garbage Collector):ZGC是一款號(hào)稱可以保證每次GC的停頓時(shí)間不超過(guò)10MS的垃圾回收器,并且和當(dāng)前的默認(rèn)垃圾回收起G1相比,吞吐量下降不超過(guò)15%。

Epsilon:什么事也不做的垃圾回收器(Epsilon: A No-Op Garbage Collector):這是一款不做垃圾回收的垃圾回收器。這個(gè)垃圾回收器看起來(lái)并沒(méi)什么用,主要可以用來(lái)進(jìn)行性能測(cè)試、內(nèi)存壓力測(cè)試等,Epsilon GC可以作為度量其他垃圾回收器性能的對(duì)照組。

增強(qiáng)var用法(Local-Variable Syntax for Lambda Parameters):在Java 11中,var可以用來(lái)作為L(zhǎng)ambda表達(dá)式的局部變量聲明。

4、Java 12

Java 12于 2019 年3 月 19 日正式發(fā)布,自Java 11 這一Long Term Support 版本發(fā)布之后半年的又一次版本更新

?主要特性:

低暫停時(shí)間的 GC(Shenandoah: A Low-Pause-Time Garbage Collector )(Experimental):新增 Shenandoah 算法,通過(guò)與正在運(yùn)行的 Java 線程同時(shí)進(jìn)行 evacuation 工作來(lái)減少 GC 暫停時(shí)間。

Switch 表達(dá)式(Switch Expressions):擴(kuò)展了 switch 語(yǔ)句,使其不僅可以作為語(yǔ)句(statement),還可以作為表達(dá)式(expression)

可中止的 G1 Mixed GC(Abortable Mixed Collections for G1) G1 及時(shí)返回未使用的已分配內(nèi)存(Promptly Return Unused Committed Memory from G1):如果 G1 Mixed GC 存在超出暫停目標(biāo)的可能性,則使其可中止。

5、Java 13

Java 13 于 2019 年 9 月 17 日正式發(fā)布,這一版本中引入了文本塊等功能。

?主要特性:

擴(kuò)展應(yīng)用程序類-數(shù)據(jù)共享(Dynamic CDS Archives):以允許在 Java 應(yīng)用程序執(zhí)行結(jié)束時(shí)動(dòng)態(tài)歸檔類。歸檔類將包括默認(rèn)的基礎(chǔ)層 CDS(class data-sharing)存檔中不存在的所有已加載的應(yīng)用程序類和庫(kù)類。

增強(qiáng) ZGC 以將未使用的堆內(nèi)存返回給操作系統(tǒng)(ZGC: Uncommit Unused Memory):ZGC 可以將未使用的堆內(nèi)存返回給操作系統(tǒng)

可在生產(chǎn)環(huán)境中使用的 switch 表達(dá)式(Switch Expressions):在switch塊中引入了yield語(yǔ)句,用于返回值。

將文本塊添加到 Java 語(yǔ)言(Text Blocks):引入多行字符串文字,在其中可以放置多行的字符串,不需要進(jìn)行任何轉(zhuǎn)義。

哪些特性改變你寫(xiě)代碼的方式?

1、本地變量類型推斷

在以前的版本中,我們想定義定義局部變量時(shí)。我們需要在賦值的左側(cè)提供顯式類型,并在賦值的右邊提供實(shí)現(xiàn)類型,如下面的片段所示:

MyObject value = new MyObject;List list = new ArrayList;

在Java 10中,你可以這樣定義對(duì)象:

var value = new MyObject;var list = new ArrayList;

正如你所看到的,本地變量類型推斷將引入“var”關(guān)鍵字,而不需要顯式的規(guī)范變量的類型。

2、switch表達(dá)式

在JDK 12中引入了Switch表達(dá)式作為預(yù)覽特性。在Java 13中又修改了這個(gè)特性,引入了yield語(yǔ)句,用于返回值。這意味著,switch表達(dá)式(返回值)應(yīng)該使用yield, switch語(yǔ)句(不返回值)應(yīng)該使用break。

在以前,我們想要在switch中返回內(nèi)容,還是比較麻煩的,一般語(yǔ)法如下:

int i;

switch (x) {

case "1":

i=1;

break;

case "2":

i=2;

break;

default:

i = x.length;

break;

}

在JDK13中使用以下語(yǔ)法:

int i = switch (x) {

case "1" -> 1;

case "2" -> 2;

default -> {

int len = args[1].length;

yield len;

}

};

或者

int i = switch (x) {

case "1": yield 1;

case "2": yield 2;

default: {

int len = args[1].length;

yield len;

}

};

3、文本塊支持

text block,文本塊,是一個(gè)多行字符串文字,它避免了對(duì)大多數(shù)轉(zhuǎn)義序列的需要,以可預(yù)測(cè)的方式自動(dòng)格式化字符串,并在需要時(shí)讓開(kāi)發(fā)人員控制格式。

我們以前從外部copy一段文本串到Java中,會(huì)被自動(dòng)轉(zhuǎn)義,如有一段以下字符串:

<html>

<body>

<p>Hello, world</p>

</body>

</html>

將其復(fù)制到Java的字符串中,會(huì)展示成以下內(nèi)容:

"<html>\n" +

" <body>\n" +

" <p>Hello, world</p>\n" +

" </body>\n" +

"</html>\n";

即被自動(dòng)進(jìn)行了轉(zhuǎn)義,這樣的字符串看起來(lái)不是很直觀,在JDK 13中,就可以使用以下語(yǔ)法了:

"""

<html>

<body>

<p>Hello, world</p>

</body>

</html>

""";

使用“”“作為文本塊的開(kāi)始符合結(jié)束符,在其中就可以放置多行的字符串,不需要進(jìn)行任何轉(zhuǎn)義。看起來(lái)就十分清爽了。

后話

從2017到2019,不果短短兩年時(shí)間,Java就發(fā)布了5個(gè)版本。每個(gè)版本都會(huì)有很多特性出來(lái),這些特性中雖然沒(méi)有像Java 8那樣提供函數(shù)式編程這樣的重大改變,但是也提供了switch表達(dá)式和block text等大家期待已久的特性。

2年過(guò)去了,在Java學(xué)習(xí)的道路上,你進(jìn)步了嗎?歡迎談?wù)勀氵@兩年的變化。

版權(quán)聲明:本文為 Hollis 原創(chuàng)文章,版權(quán)歸作者所有。

【End】

千人盛會(huì)臨近!距離BDTC 2019開(kāi)幕僅剩6天!

12月5-7日,2019中國(guó)大數(shù)據(jù)技術(shù)大會(huì)(BDTC 2019),三天超強(qiáng)技術(shù)峰會(huì),百位頂尖技術(shù)專家,Keynote+13大干貨技術(shù)專場(chǎng),燃燒你的小宇宙!

推薦內(nèi)容