Baada ya miezi sita ya maendeleo, Oracle ilichapisha jukwaa la Java SE 23 (Jukwaa la Java, Toleo la Kawaida la 23), ambalo linatumia mradi wa OpenJDK wa chanzo-wazi kama utekelezaji wa marejeleo. Isipokuwa kuondolewa kwa baadhi ya vipengele vilivyopitwa na wakati, Java SE 23 hudumisha upatanifu wa nyuma na matoleo ya awali ya jukwaa la Java - miradi mingi ya Java iliyoandikwa hapo awali itafanya kazi bila mabadiliko inapoendeshwa chini ya toleo jipya. Miundo iliyo tayari kusakinishwa ya Java SE 22 (JDK, JRE na Server JRE) imetayarishwa kwa ajili ya Linux (x86_64, AArch64), Windows (x86_64) na macOS (x86_64, AArch64). Iliyoundwa na mradi wa OpenJDK, utekelezaji wa marejeleo ya Java 23 ni chanzo wazi kabisa chini ya leseni ya GPLv2, na vighairi vya GNU ClassPath vinavyoruhusu kuunganisha kwa nguvu na bidhaa za kibiashara.
Java SE 23 imeainishwa kama toleo la kawaida la usaidizi na itaendelea kupokea masasisho hadi toleo lijalo. Tawi la Usaidizi wa Muda Mrefu (LTS) linapaswa kuwa Java SE 21 au Java SE 17, ambayo itapokea masasisho hadi 2031 na 2029, mtawalia (inapatikana kwa ujumla hadi 2028 na 2026). Usaidizi uliopanuliwa kwa tawi la LTS la Java SE 8 utaendelea hadi 2030, na Java SE 11 hadi 2032.
Kati ya uvumbuzi 23 uliopendekezwa katika Java SE:
- Njia ya kuzalisha ya uendeshaji wa mtozaji wa takataka wa ZGC (Generation Z Garbage Collector) imewezeshwa kwa default, kwa kutumia usindikaji tofauti wa vitu "vya zamani" na "vijana", ambayo huongeza ufanisi wa kusafisha vitu vilivyoundwa hivi karibuni na maisha mafupi. Kutumia ZGC ya Kizazi hupunguza hatari ya vibanda wakati wa ugawaji wa rasilimali, hupunguza mzigo wa CPU na matumizi ya kumbukumbu wakati wa kukusanya taka. Upimaji wa ZGC ya Kizazi na Apache Cassandra 4 ulionyesha ongezeko la mara 4 la upitishaji na saizi isiyobadilika ya lundo na punguzo la robo katika saizi ya lundo na matokeo ya kudumu.
- JavaDoc imeongeza usaidizi wa kutumia Markdown kuandika msimbo katika maoni, ambayo inaweza kutumika badala ya mchanganyiko wa HTML na JavaDoc @ tags.

- Mbinu za kulinganisha muundo zimeimarishwa kwa usaidizi wa awali wa matumizi ya aina za awali (int, byte, char, na aina nyingine za msingi zisizo za kitu) katika aina zote za violezo, katika taarifa ya "mfano", na katika vizuizi vya "switch". kubadili (x.getStatus()) {kesi 0 -> "sawa"; kesi 1 -> "onyo"; kesi 2 -> "kosa"; kesi int i -> "hali isiyojulikana:" + i; } ikiwa (ni mfano wa baiti b) { … b … }
- Imeongeza usaidizi wa awali wa kutumia taarifa moja ya "kuagiza moduli M" kuleta vifurushi vyote vilivyosafirishwa na moduli maalum mara moja. Mabadiliko hayo hurahisisha sana utumiaji tena wa maktaba za kawaida, hukuruhusu kujumuisha maktaba na madarasa bila kuamua mahali pao katika safu ya kifurushi. Kwa mfano, kubainisha "kuagiza moduli java.base" kutaleta vifurushi vyote 54 vilivyojumuishwa kwenye sehemu ya java.base, ambayo hapo awali ingehitaji kutajwa kando ("kuagiza java.io.*", "kuagiza java.util.* ” nk).
Utekelezaji wa pili wa awali wa API ya Class-Faili inapendekezwa kwa kuchanganua, kuzalisha, na kubadilisha faili za darasa la Java. ClassFile cf = ClassFile.of(); ClassModel classModel = cf.parse(bytes); byte[] newBytes = cf.build(classModel.thisClass().asSymbol(), classBuilder -> { for (ClassElement ce : classModel) { if (!(ce exampleof MethodModel mm && mm.methodName().stringValue(). startsWith("debug"))) { classBuilder.with(ce);
- Onyesho la kuchungulia la nane la API ya Vekta hutoa utendakazi kwa hesabu za vekta ambazo hutekelezwa kwa kutumia maagizo ya vekta kwenye vichakataji vya x86_64 na AArch64 na kuruhusu utendakazi kutumika kwa wakati mmoja kwa thamani nyingi (SIMD). Tofauti na uwezo uliotolewa katika mkusanyaji wa HotSpot JIT wa uwekaji vekta otomatiki wa shughuli za kadiri, API mpya huwezesha kudhibiti uwekaji vekta kwa uchakataji sambamba wa data.
- Umbizo lililoongezwa, printf, readPassword na readLine mbinu kwa darasa la java.io.Console ili kufomati, kuonyesha na kusoma maandishi kulingana na lugha iliyochaguliwa. System.console().printf(Locale.FRANCE, "%1$tY-%1$tB-%1$te %1$tA", new Tarehe()) 2024-mai-16 jeudi
- Muhtasari wa pili wa utekelezaji wa API ya Kutiririsha iliyopanuliwa umeongezwa ambayo inasaidia kufafanua utendakazi wako wa kati, ambayo inaweza kuwa muhimu katika hali ambapo utendakazi uliojumuishwa wa kati hautoshi kwa ubadilishaji data unaohitajika. Vishikilizi asilia vimeunganishwa kwa kutumia operesheni mpya ya kati ya Tiririsha::kusanya(Mkusanyaji), ambayo huchakata vipengele vya mtiririko kwa kutumia kidhibiti kilichobainishwa na mtumiaji kwao. jshell> Mtiririko.wa(1,2,3,4,5,6,7,8,9).kukusanya(Dirisha jipya Lililorekebishwa(3)).toList() $1 ==> [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
- Imeongeza utekelezaji wa tatu wa awali wa madarasa yaliyotangazwa kwa njia isiyo wazi na matukio ambayo hayakutajwa jina ya mbinu "kuu", ambayo inaweza kutoa matamko ya umma/tuli, kupitisha safu ya hoja, na huluki nyingine zinazohusiana na tamko la darasa. // lilikuwa darasa la umma HelloWorld { public static void main(String[] args) { System.out.println("Hello world!"); } } // sasa unaweza kufuta main() { System.out.println("Hujambo, Ulimwengu!"); }
- Imeongeza muhtasari wa pili wa kipengele kinachoruhusu wajenzi kubainisha misemo kabla ya kupiga simu super(...), inayotumika kuita kwa uwazi mjenzi wa darasa la mzazi kutoka kwa mjenzi wa darasa lililorithiwa ikiwa misemo hiyo hairejelei mfano iliyoundwa na mjenzi. class Nje { void hello() { System.out.println("Hello"); } darasa Inner { Inner() { hello(); super(); }}}
- Imeongeza onyesho la kuchungulia la tatu la Utekelezaji wa Thamani Zilizopeanwa, kuruhusu data isiyoweza kubadilika kushirikiwa katika minyororo na data kubadilishana kwa ufanisi kati ya nyuzi za watoto (thamani hurithiwa). Maadili ya Upeo yanatengenezwa ili kuchukua nafasi ya utaratibu wa vigezo vya ndani vya nyuzi na ni bora zaidi wakati wa kutumia idadi kubwa sana ya nyuzi pepe (maelfu au mamilioni ya nyuzi). Tofauti kuu kati ya Maadili ya Upeo na vigezo vya ndani vya nyuzi ni kwamba za kwanza zimeandikwa mara moja, haziwezi kubadilishwa katika siku zijazo, na kubaki zinapatikana tu kwa muda wa utekelezaji wa thread.
- Onyesho la kuchungulia la tatu la API ya Sarafu Iliyoundwa imependekezwa kwa majaribio, kurahisisha uundaji wa programu zenye nyuzi nyingi kwa kuchakata kazi nyingi zinazoendeshwa katika nyuzi tofauti kama kizuizi kimoja.
- Mbinu za ufikiaji wa kumbukumbu ya nje (nje ya JVM) zinazotolewa na darasa la sun.misc.Unsafe zimeacha kutumika na zimeratibiwa kuondolewa. Ili kufikia kumbukumbu ya nje ya lundo na kuingiliana na msimbo wa nje, inashauriwa kutumia API ya VarHandle na API ya FFM (Kazi ya Kigeni & Kumbukumbu).
Zaidi ya hayo, tunaweza kutambua uchapishaji wa sasisho kwa jukwaa la kuunda programu na kiolesura cha picha cha JavaFX 23 na kujumuishwa kwa mkusanyaji wa GraalVM JIT katika Oracle JDK 23 kuu.
Iliyowasilishwa pia ni toleo jipya la mashine ya ulimwengu wote ya GraalVM, ambayo inasaidia programu zinazoendesha katika JavaScript (Node.js), Python, Ruby, R, lugha zozote za JVM (Java, Scala, Clojure, Kotlin) na lugha . ambayo bitcode ya LLVM inaweza kutengenezwa (C , C++, Rust). Mbali na kusaidia JDK 23, toleo jipya huboresha matumizi ya kumbukumbu na saizi ya msimbo unaoweza kutekelezeka, na hutoa usaidizi kamili wa zana za kupachika Python na WebAssembly kwenye msimbo wa Java kwa kutumia mkusanyiko wa JIT.
Chanzo: opennet.ru

