友快網

導航選單

InfoQ最新Java趨勢報告及2022年解讀

作者 |

Michael Redlich, Ben Evans等

譯者 | 明知山

策劃 | 丁曉昀

本報告概述了 InfoQ Java 編輯團隊目前是如何看待 Java 領域內的技術採用和新興趨勢的。

我們重點關注 Java,以及相關的語言(如 Kotlin 和 Scala)、Java 虛擬機器(JVM)和基於 Java 的框架和工具。

我們討論了核心 Java 的發展趨勢,比如新版本 Java 的採用,以及 Spring Framework、Jakarta EE、Quarkus、Micronaut、Helidon、MicroProfile 和 MicroStream 等框架的發展。

本報告有兩個主要目標:

協助技術負責人制定中長期技術決策。

幫助個人開發者將寶貴的時間和資源投入到可以學習和發展技能的地方。

這是我們釋出的第四份 Java 趨勢報告。自 2006 年以來,我們一直在內部跟蹤 Java 和 JVM 的發展趨勢,這個話題已經有大量的新聞報道。

為了更好地瞭解 InfoQ 和 QCon 報道的關於當前和未來的發展趨勢,我們使用了 Geoffrey Moore 在同名 著作 中提出的“跨越鴻溝”技術思維模型。

我們試圖找出 Moore 所說的早期市場,早期市場的“客戶群是由技術愛好者和有遠見的人組成的,他們希望在機會或迫在眉睫的問題出現之前抓住它們。”

與我們對 2021 年、2020 年 和 2019 年Java 趨勢報告所做一樣,下面是 2022 年發展趨勢圖。

作為回顧,下面是 2021 年發展趨勢圖:

除了在創新者階段發現了一些新技術之外,一些顯著的變化如下所述。

我們決定將所有 OpenJDK 的下游發行版放到一個標籤中,即 Java Community JDK,並將它們放到早期大眾階段。這個清單包括:Amazon Corretto、Azul Zulu、OpenJDK 的微軟構建版本、BellSoft Liberica JDK、Eclipse Temurin、IBM Semeru 和 阿里巴巴龍井。

Java 17 已經進入了早期採用者階段,因為一些框架,尤其是 Spring,已經將 Java 17 作為基線。

由於 MicroStream 與 Helidon、Micronaut 和 Spring Boot 的持續開發和整合,也加入到了 Helidon 和 Micronaut 的早期採用者階段。

Spring Native 被移除,取而代之的是更通用的原生 Java。這是因為最初於 2020 年推出並休眠了兩年的 Leyden 專案於 2022 年 5 月 重新啟動,Vmware 決定用 GraalVM 取代 Spring Native 專案來支援生成原生映象。

經過一年多的開發,Spring Framework 6。0 和 Spring Boot 3。0 都於 2022 年 11 月釋出,採用了 Java 17+ 和 Jakarta EE 9 基線。這些版本還透過 Micrometer 內嵌了可觀察性。

以下是 InfoQ 的幾位 Java Queue 編輯與 Java Champion 對不同主題的討論摘要。這些編輯和 Java Champion 包括:

Michael Redlich——埃克森美孚技術與工程公司高階研究技術員,InfoQ Java Queue 首席編輯;

Ben Evans——Red Hat 高階首席軟體工程師,InfoQ Java Queue 編輯;

Johan Janssen——ASML 軟體架構師,InfoQ Java Queue 編輯;

Dalia Abo Sheasha——微軟產品經理;

Billy Korando——Oracle 開發者佈道師;

Otávio Santana——Zup Innovation 傑出軟體工程師。

我們也要感謝為更新 2022 年“跨越鴻溝”模型提供輸入的其他 Java Queue 編輯:

Erik Costlow——產品高階總監,InfoQ Java Queue 編輯;

Karsten Silz——Java 全棧開發者,InfoQ Java Queue 編輯。

他們為我們在發展趨勢圖上推薦的一些技術定位提供了更多的背景資訊。

OpenJDK

Korando

:作為 Amber 專案的一部分,Record 類、模式匹配和對字串的改進讓我最為興奮。我知道,在我的職業生涯中,這些特性在進行資料轉換、處理格式化字串和其他令人沮喪的任務時都非常有用。使用這些特性讓我感到興奮,未來的 Java 開發者也將受益於這些特性,不必像我一樣經歷這些挫折。

Santana

:Java 8 已經過時了。在最近的一項市場調查(如 JRebel 的報告)中,我們可以看到 Java 8 的受歡迎程度正在下降。這種變化對於 Java 市場和開發者體驗行業(如 IDE、框架、整合工具等)來說都是一件好事。我們還可以看到市場和 Java 社群為將 Java 11 作為最低版本要求付出了巨大的努力,比如 Quarkus 和 Jakarta EE 的最新版。我相信其他應用程式框架也會效仿,將 Java 11 作為最低版本要求。當我們談及 Java 平臺,我相信這些工具和框架佔了企業程式碼的 80% 左右,所以它們會不斷更新,以免失去企業開發者的青睞。向 Java 11 的遷移也表明了一種更快節奏的文化,Java 和 JDK 版本將更頻繁地更新,至少每兩年更新一次。

Evans

:隨著 JDK 17 的釋出,JDK 11 終於在市場上超越了 JDK 8。

Adoptium Marketplace 的釋出和可重複構建的到來比許多人意識到的要重要得多,對於那些必須關心供應鏈安全的企業和個人來說尤其如此。

Redlich

:去年釋出的 Java 18 和 Java 19 提供了新的預覽和孵化器特性,如虛擬執行緒、結構化併發、switch 模式匹配、Record 模式以及外部函式和記憶體 API。這些特性以 JEP 的形式為 Amber 專案、Loom 專案 和 Panama 專案 提供了持續的貢獻。Java 20 計劃於 2023 年 3 月釋出,它將提供這些特性的升級預覽和孵化器版本。

Java 17 及以上版本

Sheasha

:自從最新的 Java 17 LTS 釋出以來,我們注意到 Java 17 的採用速度比 Java 11 釋出時要快。這是由各種各樣的因素導致的,包括公司採用更現代的 DevOps 流程和管道,支援更快更容易的應用程式更新。另一個因素是框架和庫採用了更快的釋出節奏,而這在以前是開發者升級應用程式的一大障礙。最新的 Spring Framework 6 基於 Java 17,這向開發者傳達了採用最新版本 Java 的決心。另一個擁抱更快 Java 釋出節奏的團隊是 Minecraft 團隊,他們現在向數百萬玩家釋出的更新也是基於 Java 17 的。

與此同時,我們看到許多應用程式仍然在使用 Java 8。由於從 Java 8 升級到 Java 11 比從 Java 11 升級到 Java 17 更困難,因此,已經升級到 Java 11 的團隊更有可能迅速採用 Java 17。

我們還看到越來越多的開發者使用非 LTS Java 版本(Java 18+),因為他們更有信心為自己的應用程式採用更新的 Java 版本,這樣他們可以使用 Java 的新特性,而不必再等待數年。我們看到許多開發者在建立原型或開發新應用程式時選擇了最新的非 LTS Java 版本。但對於生產環境來說,LTS 版本仍然是大多數團隊的選擇。

Santana

:在最新的 LTS 版本中,Java 17 為 Java 開發者帶來了幾個新特性,其中 Record 模式帶來了一個主要與企業業務相關的新視角。

Janssen

:有許多令人興奮的變化,例如 Spring Boot 要求使用 Java 17,這有望促進 Java 17 的採用。

Loom 專案與虛擬執行緒

Sheasha

:在 Java 效能方面有很多令人興奮的變化。許多開發者都很高興看到 Loom 專案的更新,因為他們現在可以嚐鮮一些新的特性,如虛擬執行緒。

Korando

:將 Loom 專案的關鍵特性合併到主線 Java 發行版中可能是過去一年裡最重要的變化。Loom 專案的開發在過去幾年中一直備受關注,因為它承諾的更高的水平可伸縮性將被應用於許多 Java 開發者的應用程式中。雖然一些特性,如虛擬執行緒,現在已經準備好用於生產環境中,但毫無疑問,許多開發者都在熱切地等待它們從預覽狀態移出,成為 LTS 的一部分,並有望在 2023 年 9 月與 Java 21 一起釋出。

Evans

:我聽到很多人都在談論 Loom 專案,但我對它持保留態度——我想等到我們有了更多的實際經驗之後再說。我認為它可能會像一些人認為的那樣改變遊戲規則,但我不認為這是一件容易的事情。

Redlich

:2022 年 9 月,備受期待的 Java 19 釋出了對虛擬執行緒的支援。這方面已經有了孵化器框架,如 Helidon Níma(Oracle 提供的微服務框架)和 Vert。x 提供的虛擬執行緒孵化器專案。我預計其他供應商也會效仿。

Jakarta EE

在延遲了大約三個月之後,備受期待的 Jakarta EE 10 於 2022 年 9 月 22 日向 Java 社群釋出了。

Redlich

:Jakarta EE 10 對 20 多個規範進行了更新,並增加了一個新的 Core Profile,作為現有平臺和 Web Profile 的補充。Jakarta EE 工作組已經在討論 Jakarta EE 10 和 Jakarta EE 11 的小版本更新計劃。

原生 Java(GraalVM/Spring Native/Leyden 專案)

Santana

:GraalVM 越來越受歡迎,這為 Leyden 專案 提供了巨大的空間。這是一場如何讓 Java 啟動更快的競賽!

Janssen

:GraalVM 正在不斷改進並支援更多的用例,例如 Spring 應用程式。

Open Telemetry

Evans

:OpenTelemetry 已經發布了 1。0 版本,對於這樣一個出現時間不長的標準來說,這算是取得了巨大的進步。我沒想到 OpenTelemetry 會這麼輕易超越已經很激進的預期。它將實現甘特提出的“到 2023 年底實現遙測大部分流量”的目標,這遠遠超出了計劃。

Redlich

:即將釋出的 MicroProfile 6。0 將首次推出 MicroProfile Telemetry 規範,用以取代 MicroProfile 1。3 中 首次引入 的 MicroProfile OpenTracing 規範。

容器

Sheasha

:隨著越來越多的 Java 工作負載遷移到容器中,我們看到了一種轉變——從只討論如何容器化 Java 應用程式到如何最好地容器化 Java 應用程式。我們看到了更多關於如何在容器中執行應用程式的最佳實踐。例如,微軟發表了一篇關於記憶體分配和垃圾收集的文章。

Evans

:Java 應用程式的容器化仍在繼續演進當中。

微軟對 Java 的支援

在 2021 年 4 月推出自己的 OpenJDK 下游發行版後,微軟繼續擁抱 Java 程式語言。

Sheasha

:微軟加入了 Jakarta EE和 MicroProfile工作組,因為微軟繼續在 Java 生態系統上進行大量投入,原因有很多,GitHub ReadME 專案的這篇 文章 對此做了說明。

來自 Java 社群的聲音

Sheasha

:隨著創新速度的加快,現代化仍然是許多開發者面臨的挑戰。釋出的 Java 版本越多,應用程式在 Java 版本和框架方面的差距就越大,而且越來越難以縮小。這就是為什麼我們看到越來越多的公司在現代化工具上進行了投入。一些專案(如 OpenRewrite)對我們來說很重要,因為它們可以讓我們在不拋棄應用程式的同時保持創新。我們還看到了一些新的專案,例如用於 Java 的 Eclipse 遷移工具包,它可以幫助開發者進行 Java 版本遷移。

開發者疲於學習和掌握開發應用程式所需的大量知識,因為不斷有新的庫、框架和特性出現。此外,我們看到了“DevOps”中越來越多的“Ops”部分滲透到開發者的職責當中,所以開發者現在也需要了解 Docker 和 Kubernetes。

Korando

:我認為,Loom 專案向主線 OpenJDK 交付特性的興奮點開始轉向了 Valhalla 專案。Valhalla 專案是 OpenJDK 的另一個長期專案,有望顯著改善記憶體管理和吞吐量效能。希望我們能在 2023 年將 Valhalla 專案特性交付到 OpenJDK 主線!

Santana

:無反射框架成為一個新趨勢,透過消除反射來縮短應用程式啟動時間和減少記憶體消耗。Quarkus、Micronaut、Spring Native 和 Jakarta CDI Lite 等框架就是這方面的例子。

雲是所有解決方案的新目標。我們看到了向各種環境的遷移,不僅是基礎設施即服務(IaaS),還包括任何能夠提升 Java 開發者效率併為操作層提供更多抽象的解決方案。

從軟體開發者的角度來看,無伺服器帶來了可伸縮性和簡單性。為了利用這些優勢,我們可以看到一些解決方案轉向了原生。

Evans

:今年,Quarkus 似乎已經開始關注開發者的意識。我經常會遇到嘗試使用 Quarkus 的開發者,儘管實際的應用數量仍在增長當中。我想人們已經意識到它不僅僅是原生編譯的 Java,它也是一流的 Kubernetes Java,具備很棒的開發體驗。

有哪些令人興奮的新東西我們還沒有關注

Korando

:在 JavaOne 2022 上宣佈將 Graal JIT 編譯器和原生映象合併到 OpenJDK 中,這是出乎我們意料的一件事。GraalVM 的許多技術都很激動人心,但對於許多 Java 開發者來說它們很難使用。將這些關鍵特性合併到 OpenJDK 中可以讓 Java 開發者更容易地使用它們!

Santana

:我們知道,開發工具和架構是一個巨大的產業。因此,我們可以看到許多公司在談論“完美解決方案”和非權衡決策。但實際上,Java 在其他方面被證明具有一致性,並且在一些場景中有一些成功案例。每一種架構決策都存在權衡,我們需要了解其上下文,以便將最佳解決方案應用到最佳的場景中。Java 生態系統向我們展示了它是一個生產就緒的平臺,它為微服務、CQRS、雲原生、無伺服器、事件驅動設計、單體系統、SQL、NoSQL、對映器、活動記錄等提供瞭解決方案。

Evans

:我沒想到 Loom 會在 Java 19 中作為試驗特性被及時合併到主線,我真的很喜歡 Gunnar Morling 的 JFR Analytics 專案。

Janssen

:我最近了解了 OpenJDK 的檢查點協調恢復(Coordinated Restore at Checkpoint,CRaC),它透過執行時最佳化縮短啟動時間。

Java 社群

Sheasha

:就我個人而言,我很慶幸 Java 在我的整個職業生涯中為我打開了許多扇門。我曾有機會在 Java 生態系統中擔任開發者、團隊負責人、開發者佈道師和程式經理。

Java 在語言方面的不斷創新和改進讓這個領域變得有趣,還使 Java 成為解決各種行業各種問題的絕佳選擇。對我來說,我喜歡在 Java 領域工作的一個最大的理由是 Java 社群,社群裡滿是來自世界各地的充滿熱情的人才。

Evans

:逐漸跟 Java 8 告別,並讓社群轉向 Java 17 及更高版本,這另人感到興奮。此外,在可觀測性方面,尤其是 OpenTelemetry,正變得越來越強大。此外,還有一些關於 Profile 的新工作(包括 Java Flight Recorder)正在啟動。

Janssen

:我真的很期待與 Loom 專案合作,希望我們很快就能夠開始在專案中使用它。

Redlich

:我很享受為開源專案做貢獻的時光,最近還成為 Jakarta NoSQL 和 Jakarta Data 規範以及 Eclipse JNoSQL 專案(Jakarta NoSQL 的相容實現)的提交者。我們一直致力於在 Jakarta EE 11 釋出時將這兩個 Jakarta 規範及時包含在 Jakarta EE 平臺中。

結論

需要注意的是,我們的觀點只涵蓋了一部分東西。Java 生態系統的不同部分可能會有不同的體驗。我們的這份 2022 年報告可以作為討論的引子,而不是一個明確的宣告。我們也希望人們能夠就行業的發展方向展開公開的討論。

原文連結

https://www。infoq。com/articles/java-jvm-trends-2022/

InfoQ 2022 年趨勢報告:。NET 篇(https://www。infoq。cn/article/UjJrO7kBo8QSuFes5tcz)

InfoQ 2022 年趨勢報告:人工智慧、機器學習和資料工程篇(https://www。infoq。cn/article/bNkyoLzwxU7Li2v94Noe)

InfoQ 2022 年趨勢報告:DevOps 與雲計算篇(https://www。infoq。cn/article/qrvLruwaMWIeoz2zbrdI)

InfoQ 2022 年趨勢報告:架構與設計篇(https://www。infoq。cn/article/0dJ52ivjyHhxc2YYfgxW)

InfoQ 2022 年趨勢報告:移動及物聯網篇(https://www。infoq。cn/article/fEJyy2uOUM2h3NEUFXG9)

InfoQ 2022 年趨勢報告:文化與方法篇(https://www。infoq。cn/article/s2HC2rgLtM3AuppIfJHR)

宣告:本文為 InfoQ 翻譯,未經許可禁止轉載。

炒股開戶享福利,入金抽188元紅包,100%中獎!

開啟App看更多精彩內容

上一篇:品牌網站給人長久印象的七個技巧
下一篇:踩著年的尾巴,交了一次智商稅!