Java培訓(xùn):2023年的Java趨勢(shì)是什么?
好吧,我們已經(jīng)討論了2022年Java發(fā)生了什么,以及2023年將發(fā)生什么。但是,在本文中,我們將深入一點(diǎn),告訴你Java生態(tài)系統(tǒng)以及對(duì)最近未來(lái)的預(yù)測(cè)。無(wú)論如何,這是不同的附加工具和改進(jìn),可以提高生產(chǎn)力、穩(wěn)定性、安全性和Java的性能。
Project Loom和虛擬線程
我們想從Project Loom中創(chuàng)建的期待已久的虛擬線程(JEP 425)開(kāi)始,這些線程最終于2022年在Java 19版本中出現(xiàn),以解決傳統(tǒng)并發(fā)模型中的限制。雖然它們現(xiàn)在僅在預(yù)覽模式下可用,但我們相信它會(huì)隨著2023年的下一個(gè)版本而改變。
什么是Project Loom?這是Oracle的一個(gè)新項(xiàng)目,其主要目標(biāo)是顯著減少編寫(xiě)、維護(hù)和觀察高吞吐量并發(fā)應(yīng)用程序的工作量。換句話說(shuō),Project Loom旨在支持和推進(jìn)Java中的高吞吐量、輕量級(jí)并發(fā)模型,因?yàn)閭鹘y(tǒng)的操作系統(tǒng)線程(在Java并發(fā)模型的核心)有一些缺點(diǎn),并且在計(jì)算上相當(dāng)昂貴。
而虛擬線程則是更輕量級(jí)的線程,不與OS線程連接(它們由JVM管理)。這意味著虛擬線程是“每請(qǐng)求線程數(shù)”編程的理想選擇,可以在不降低吞吐量的情況下創(chuàng)建大量虛擬線程。因此,我們看到Java19中引入的虛擬線程非常易于使用,它們?cè)试S開(kāi)發(fā)人員使用現(xiàn)有的JDK工具和技術(shù)快速診斷、調(diào)試和評(píng)測(cè)并發(fā)應(yīng)用程序。
正如專(zhuān)家們所說(shuō),Project Loom和虛擬線程的引入可能是Java歷史上最重要的事件之一。實(shí)際上,許多開(kāi)發(fā)人員現(xiàn)在都在期待虛擬線程從“預(yù)覽狀態(tài)”轉(zhuǎn)變?yōu)椤癑ava 21 LTS的一部分”(預(yù)計(jì)2023年9月發(fā)布)。我們預(yù)測(cè),虛擬線程的采用將隨著框架的發(fā)展而不斷增長(zhǎng),并最終使Java開(kāi)發(fā)人員能夠更容易地編寫(xiě)需要數(shù)百萬(wàn)個(gè)同時(shí)連接的更具可擴(kuò)展性的軟件。
Jakarta EE
Jakarta EE只是Java EE(Java Enterprise Edition)的新名稱(chēng),它主要是構(gòu)建關(guān)鍵業(yè)務(wù)軟件的平臺(tái)。盡管在項(xiàng)目在Eclipse基金會(huì)的控制下移動(dòng)后,平臺(tái)獲得了新名稱(chēng),但這并沒(méi)有改變平臺(tái)的本質(zhì)。Jakarta EE在你運(yùn)行大型企業(yè)應(yīng)用程序時(shí)發(fā)揮了重要作用,該應(yīng)用程序應(yīng)具有可擴(kuò)展性、安全性和處理大量信息的能力。
Jakarta EE由一套用于創(chuàng)建企業(yè)Java應(yīng)用程序的軟件組件API組成。這些組件通常被稱(chēng)為“雅加達(dá)EE規(guī)范”,用于擴(kuò)展Java SE版本(標(biāo)準(zhǔn)版本)。這些規(guī)范對(duì)開(kāi)發(fā)人員有很大幫助,因?yàn)樗麄兠獬碎_(kāi)發(fā)人員自己編寫(xiě)代碼的需要。因此,開(kāi)發(fā)人員可以專(zhuān)注于應(yīng)用程序的業(yè)務(wù)邏輯,而不是次要的基礎(chǔ)設(shè)施任務(wù)。這不僅僅是為了節(jié)省時(shí)間和精力。它還涉及為用戶(hù)創(chuàng)建一個(gè)更高效的系統(tǒng)。
當(dāng)談到Jakarta EE在2023年的期望時(shí),我們相信它將成為一個(gè)主流框架,使你能夠輕松提升業(yè)務(wù)應(yīng)用程序。它將成為涉及微服務(wù)或單片開(kāi)發(fā)的項(xiàng)目的理想解決方案。然而,你應(yīng)該記住,你需要使用即將發(fā)布的Vaadin 24(計(jì)劃于2023年3月發(fā)布)來(lái)利用Spring Boot 3或Jakarta EE 10兼容應(yīng)用程序服務(wù)器等應(yīng)用程序框架。

容器
當(dāng)你對(duì)Java應(yīng)用程序進(jìn)行容器化時(shí),通常應(yīng)首先考慮容器的可用CPU時(shí)間。然后,考慮有多少內(nèi)存可用(內(nèi)存總量和JVM、Java虛擬機(jī)的大小)。在容器化環(huán)境中,應(yīng)用程序可以訪問(wèn)所有處理器,因此可以同時(shí)運(yùn)行多個(gè)線程。
如今,Java應(yīng)用程序的容器化繼續(xù)取得進(jìn)展,這種趨勢(shì)似乎不會(huì)很快改變。由于越來(lái)越多的Java工作負(fù)載現(xiàn)在在容器中運(yùn)行,我們可以看到從只討論“如何”將Java應(yīng)用程序容器化到“如何更好地”將其容器化的轉(zhuǎn)變。此外,我們還可以看到更多關(guān)于在容器中運(yùn)行應(yīng)用程序的最佳實(shí)踐的信息和指南。
Leyden項(xiàng)目
該項(xiàng)目的主要目標(biāo)是改善Java的長(zhǎng)期痛點(diǎn)——啟動(dòng)時(shí)間慢、性能達(dá)到峰值的時(shí)間慢,以及Java應(yīng)用程序的占地面積大。通過(guò)將靜態(tài)運(yùn)行時(shí)映像集成到Java平臺(tái)和JDK中。所謂靜態(tài)圖像,我們指的是從應(yīng)用程序和運(yùn)行該應(yīng)用程序的JDK派生的獨(dú)立程序。靜態(tài)映像實(shí)際上是關(guān)于它可以加載的類(lèi)的“封閉世界”(它既不從映像外部加載類(lèi),也不動(dòng)態(tài)創(chuàng)建類(lèi))。
然而,我們要注意的是,Leyden項(xiàng)目并不是為了提高Java應(yīng)用程序的整體性能。它只是修復(fù)了啟動(dòng)部分,并依賴(lài)于另一個(gè)項(xiàng)目GraalVM,該項(xiàng)目正在不斷改進(jìn)并越來(lái)越受歡迎。此外,它開(kāi)始支持更多的用例,如Spring應(yīng)用程序。
總結(jié)
簡(jiǎn)單性、安全性和健壯性的結(jié)合是Java在頂級(jí)技術(shù)中保持領(lǐng)先地位的主要原因之一。2023年有望成為更深入地采用虛擬線程的一年(在JDK 20中,將于3月發(fā)布),以進(jìn)一步將輕量級(jí)并發(fā)構(gòu)造推廣到Java。虛擬線程將專(zhuān)注于更好的擴(kuò)展能力;虛擬線程的線程API采用;以及簡(jiǎn)化的故障排除、調(diào)試和分析。
據(jù)預(yù)測(cè),GraalVM社區(qū)版Java代碼的一部分將轉(zhuǎn)移到OpenJDK,以便與GraalVM和Java技術(shù)的開(kāi)發(fā)相關(guān)聯(lián)。Oracle已經(jīng)宣布GraalVM JIT和AOT編譯器的社區(qū)版本將在2023年遷移到OpenJDK。正如你所看到的,Java生態(tài)系統(tǒng)中的變化是重大的,它們展示了行業(yè)如何向前發(fā)展。