Elasticsearch 8.0 官宣:擁抱 Java 17!下一個里程碑式版本!
你好,我是 Guide,簡單分享一下 Elasticsearch 8.0 運行最低要求 Java 17 的消息。關(guān)于?Elasticsearch 8.0 的詳細介紹請看次條推送,關(guān)于 Elasticsearch 實戰(zhàn),請看?1W字|40 圖|硬核 ES 實戰(zhàn)?這篇文章。
下面是正文。
新版任你發(fā),我用 Java 8,這可能是當下 Java 開發(fā)者的真實寫照。甚是有的 Java 程序員還依然在堅守 Java 6,Java 7 ,這份專一讓喜歡追新版本的 Guide 汗顏。
我說,兄弟啊,Java 版本又不是媳婦,咱沒必要這么專一吧!

不過,時代可能真的要拋棄 Java 8,全面擁抱 Java 17 了。我也非常相信?Java 17? 會成為像?Java 8 那樣的里程碑式的版本!
Spring Boot 3.0
前些天,相信小伙伴們都注意到了,SpringBoot 發(fā)布了 3.0.0-M1 版本,并官宣全面擁抱 Java 17,下面的截圖是 Release Notes 中的一段:

其他的新特性大家可以去 Github 查看。
https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.0.0-M1-Release-Notes/16c166b5fb4232998a8cfd3966c2851ec1eddf02
你也可以閱讀?Spring Boot 3.0.0 來啦?。。∽钚∫蕾?Java17!升還是不升?這篇文章來了解 SpringBoot3.0.0 的詳細信息。
Spring Boot 3.0.0-M1 版本發(fā)布,也意味著 Spring Boot 進入 3.x 版本的迭代,同時也看到,3.x 版本開始 Spring Boot 要全面擁抱 Java 17 了。
Elastic 8
湊巧的是,2022 年 2 月 11 日,Elastic 也發(fā)布了新版本 Elastic 8,這個版本跟上個版本間隔了 3 年。下面的截圖是 Issue 79873,地址:https://github.com/elastic/elasticsearch/pull/79873 。

可以看到,運行新的 Elasticsearch 版本需要 Java 17 了。
我們在?Elastic 8 的官網(wǎng)升級指南中也能看到對應(yīng)的信息了:

地址:https://www.elastic.co/guide/en/elasticsearch/reference/8.0/migrating-8.0.html
Java 17
從 Java 8 以后,每個版本發(fā)布都增加了哪些新特性呢?我們一起來看一下。
Java 9
私有接口方法 默認垃圾收集器改為 G1 HTTP client,支持 WebSocket、HTTP/2、HTTPS/TLS、非阻塞 API。
Java 10
局部變量類型推斷,可以使用 var 類型來定義變量。 不可變集合 G1 支持并行 Full GC 基于 Java 的 JIT 編譯器 Graal 支持在不執(zhí)行全局安全點的情況下執(zhí)行線程回調(diào),這樣可以在不停止所有線程的情況下停止單個線程。
Java 11
標準 HTTP Client 升級 引入 ZGC 垃圾收集器 Flight Recorder,可以收集基于 OS、JVM和JDK 事件產(chǎn)生的數(shù)據(jù)。 對Stream、Optional、集合 API進行增強。
Java 12
引入 Switch 表達式 Shenandoah GC 垃圾收集算法 JMH 基準測試 G1 支持可中斷的 mixed GC,將 Mixed GC 拆分為強制部分和可選部分,強制部分一定會被回收,可選部分可以不被回收,這樣垃圾收集過程中優(yōu)先處理強制集,更容易滿足暫停時間目標。 G1 可以歸還不使用的內(nèi)存給操作系統(tǒng)
Java 13
switch 優(yōu)化更新,增加 yield 關(guān)鍵字用于返回結(jié)果。 ZGC 支持將未使用的內(nèi)存歸還操作系統(tǒng) 引入了文本塊,可以使用 """ 三個引號表示文本塊,示例代碼如下:
String?html?=?"""
??
???
????Hello,?world
???
??
""";
Java 14
instanceof 語法簡化,可以直接給對象賦值:
if?(obj?instanceof?String?s)?{?
????//這里可以使用?s?變量
}?else?{
????//這里不能使用?s?變量
}
引入 Record,類似于枚舉類型,具有 Lombok 功能,可以自動生成構(gòu)造器、equals、getter 等方法。 放棄 CMS
Java 15
引入 hidden class String.substring 優(yōu)化,如果長度為 0,返回 null 引入 Sealed class
Java 16
Stream新增toList方法 提供jpackage java.time 根據(jù)時段獲取時間
Java 17
升級 switch 使用,switch可直接用 instanceof 模式匹配選擇,不過需要提前做 null 判斷(下面代碼選自 oschina):
Object?o;
switch?(o)?{
????case?null??????->?System.out.println("首先判斷對象是否為空,走空指針邏輯等后續(xù)邏輯");
????case?String?s??->?System.out.println("判斷是否為字符串,s:"?+?s);
????case?record?p??->?System.out.println("判斷是否為Record類型:?"?+?p.toString());
????case?int[]?arr?->?System.out.println("判斷是否為數(shù)組,展示int數(shù)組的長度"?+?ia.length);
????case?Integer?i?->?System.out.println("判斷是否為Intger對象,i:"?+?i);
????case?Student?s???->?System.out.println("判斷是否為具體學生對象,student:"?+?s.toString());
????case?UserCommonService?->?System.out.println("判斷是否為普通用戶實現(xiàn)類,然后走普通用戶邏輯");
????case?UserVipService????->?System.out.println("判斷是否為vip用戶實現(xiàn)類,然后走vip用戶邏輯");
????default???->?System.out.println("Something?else");
}
默認啟用 Parallel GC 增強TreeMap 統(tǒng)一日志異步刷新,先將日志寫入緩存,獨立線程負責刷新到相應(yīng)輸出。
上面的版本只有 Java 11 和 Java 17 是 LTS(Long Term Support) 版本。
總結(jié)
全面擁抱 Java 17 還沒有真的到來,但已經(jīng)在路上了,作為程序員的我們應(yīng)該做準備了。
知識星球內(nèi)部的讀書筆記中就有 Java 新特性相關(guān)的總結(jié)分享。
如果本文對你有幫助的話,歡迎點贊&在看&分享,這對我繼續(xù)分享&創(chuàng)作優(yōu)質(zhì)文章非常重要。感謝????


