Eftir sex mánaða þróun gaf Oracle út Java SE 23 vettvanginn (Java Platform, Standard Edition 23), sem notar open-source OpenJDK verkefnið sem viðmiðunarútfærslu. Að undanskildum því að fjarlægja úrelta eiginleika, heldur Java SE 23 afturábak samhæfni við fyrri útgáfur af Java pallinum - flest áður skrifuð Java verkefni munu virka án breytinga þegar þau eru keyrð undir nýju útgáfunni. Tilbúnar uppsetningargerðir af Java SE 22 (JDK, JRE og Server JRE) eru útbúnar fyrir Linux (x86_64, AArch64), Windows (x86_64) og macOS (x86_64, AArch64). Þróuð af OpenJDK verkefninu, Java 23 viðmiðunarútfærslan er að fullu opinn uppspretta undir GPLv2 leyfinu, með GNU ClassPath undantekningum sem leyfa kraftmikla tengingu við auglýsingavörur.
Java SE 23 er flokkuð sem venjuleg stuðningsútgáfa og mun halda áfram að fá uppfærslur fram að næstu útgáfu. Útibúið fyrir langtímastuðning (LTS) ætti að vera Java SE 21 eða Java SE 17, sem mun fá uppfærslur til 2031 og 2029, í sömu röð (almennt fáanlegt til 2028 og 2026). Framlengdur stuðningur við LTS útibú Java SE 8 mun endast til 2030 og Java SE 11 til 2032.
Meðal 23 nýjunga sem lagðar eru til í Java SE:
- Generation mode of the ZGC (Generation Z Garbage Collector) sorphirðu er sjálfgefið virkjuð, með aðskildri vinnslu á „gömlum“ og „ungum“ hlutum, sem eykur skilvirkni við að hreinsa upp nýlega búna hluti með stuttum líftíma. Notkun Generational ZGC dregur úr hættu á stöðvun við úthlutun auðlinda, dregur úr CPU álagi og minnisnotkun við sorphirðu. Testing Generational ZGC með Apache Cassandra 4 sýndi 4x aukningu á afköstum með fastri hrúgustærð og fjórðungs minnkun á hrúgustærð með stöðugu afköstum.
- JavaDoc hefur bætt við stuðningi við að nota Markdown til að skrá kóða í athugasemdum, sem hægt er að nota í stað blöndu af HTML og JavaDoc @ merkjum.

- Mynstursamsvörun hefur verið endurbætt með bráðabirgðastuðningi við notkun frumstæðra tegunda (int, bæti, bleikju og annarra grunngerða sem ekki eru hluti) í alls kyns sniðmátum, í "instanceof" yfirlýsingunni og í "switch" blokkum. switch (x.getStatus()) { case 0 -> “allt í lagi”; tilvik 1 -> „viðvörun“; tilvik 2 -> "villa"; case int i -> “óþekkt staða: ” + i; } if (i tilvik af bæti b) { … b … }
- Bætti við bráðabirgðastuðningi við að nota eina „innflutningseiningu M“ yfirlýsingu til að flytja inn alla pakka sem fluttir eru út af tiltekinni einingu í einu. Breytingin einfaldar verulega endurnotkun mátbókasafna, sem gerir þér kleift að taka með bókasöfn og flokka án þess að ákveða stað þeirra í pakkastigveldinu. Til dæmis, ef tilgreint er „import module java.base“ mun flytja inn alla 54 pakka sem eru innifalin í java.base einingunni, sem áður hefði þurft að nefna sérstaklega ("import java.io.*", "import java.util.* “ o.s.frv.).
Önnur bráðabirgðaútfærsla á Class-File API er lögð til til að flokka, búa til og umbreyta Java flokkaskrám. ClassFile cf = ClassFile.of(); ClassModel classModel = cf.parse(bytes); bæti[] newBytes = cf.build(classModel.thisClass().asSymbol(), classBuilder -> { for (ClassElement ce: classModel) { if (!(ce instanceof MethodModel mm && mm.methodName().stringValue(). startsWith("kemba"))) { classBuilder.with(ce);
- Áttunda sýnishornið af Vector API býður upp á aðgerðir fyrir vektorútreikninga sem eru keyrðir með vektorleiðbeiningum á x86_64 og AArch64 örgjörvum og gera kleift að beita aðgerðum samtímis á mörg gildi (SIMD). Ólíkt þeim möguleikum sem gefnir eru upp í HotSpot JIT þýðandanum fyrir sjálfvirka vektorvæðingu á mælikvarðaaðgerðum, gerir nýja API það mögulegt að beinlínis stjórna vektormyndun fyrir samhliða gagnavinnslu.
- Bætti sniði, printf, readPassword og readLine aðferðum við java.io.Console bekkinn til að forsníða, birta og lesa texta út frá völdum staðsetningum. System.console().printf(Locale.FRANCE, "%1$tY-%1$tB-%1$te %1$tA", new Date()) 2024-mai-16 jeudi
- Önnur forskoðunarútfærsla á útvíkkuðu Stream API hefur verið bætt við sem styður skilgreiningu á eigin milliaðgerðum, sem gæti verið gagnlegt í þeim tilvikum þar sem núverandi innbyggðar milliaðgerðir duga ekki fyrir æskilega gagnaumbreytingu. Innfæddir meðhöndlarar eru tengdir með því að nota nýju milliaðgerðina Stream::gather(Gatherer), sem vinnur úr straumsþáttum með því að nota notendatilgreinda meðhöndlun á þá. jshell> Stream.of(1,2,3,4,5,6,7,8,9).gather(new WindowFixed(3)).toList() $1 ==> [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
- Bætti við þriðju bráðabirgðaútfærslu á óbeint yfirlýstum flokkum og ónefndum tilfellum af „aðal“ aðferðinni, sem getur sleppt opinberum/stöðulausum yfirlýsingum, framhjá fjölda röka og annarra eininga sem tengjast tegundayfirlýsingu. // var public class HelloWorld { public static void main(String[] args) { System.out.println("Halló heimur!"); } } // nú geturðu ógilt main() { System.out.println("Halló, heimur!"); }
- Bætti við annarri forskoðun á eiginleika sem gerir smiðum kleift að tilgreina segð áður en þeir kalla super(...), notað til að kalla beinlínis í smiði móðurklasar frá smiði erfðs flokks ef þær tjáningar vísa ekki til tilviks sem smíðarinn hefur búið til. class Ytri { void halló() { System.out.println("Halló"); } flokkur Innri { Innri() { halló(); frábær(); } } }
- Bætti við þriðju forskoðunarútfærslu á Scoped Values, sem gerir kleift að deila óbreytanlegum gögnum milli þráða og gögnum skiptast á skilvirkan hátt á milli barnaþráða (gildi eru erfðir). Verið er að þróa umfangsgildi til að skipta um þráð-staðbundnar breytur vélbúnaður og eru skilvirkari þegar mjög mikið magn af sýndarþráðum er notað (þúsundir eða milljónir þráða). Helsti munurinn á umfangsgildum og staðbundnum breytum þráðar er að þær fyrrnefndu eru skrifaðar einu sinni, ekki er hægt að breyta þeim í framtíðinni og eru aðeins tiltækar meðan þráðurinn er keyrður.
- Þriðja sýnishornið af Structured Concurrency API hefur verið lagt til til prófunar, sem einfaldar þróun fjölþráða forrita með því að vinna úr mörgum verkefnum sem keyra í mismunandi þræði sem einn blokk.
- Aðferðirnar fyrir ytri minnisaðgang (utan JVM) sem sun.misc.Unsafe flokkurinn býður upp á hefur verið úrelt og áætlað að fjarlægja þær. Til að fá aðgang að minni utan hrúgu og hafa samskipti við utanaðkomandi kóða er mælt með því að nota VarHandle API og FFM (Foreign Function & Memory) API.
Að auki getum við tekið eftir útgáfu uppfærslu á vettvang til að búa til forrit með JavaFX 23 grafísku viðmóti og innkomu GraalVM JIT þýðanda í aðal Oracle JDK 23.
Einnig er kynnt ný útgáfa af alhliða sýndarvélinni GraalVM, sem styður keyrsluforrit í JavaScript (Node.js), Python, Ruby, R, hvaða tungumál sem er fyrir JVM (Java, Scala, Clojure, Kotlin) og tungumál sem hægt er að búa til LLVM bitakóða fyrir (C, C++, Rust). Auk þess að styðja JDK 23, hámarkar nýja útgáfan minnisnotkun og stærð keyranlegs kóða og veitir fullan stuðning við verkfæri til að fella Python og WebAssembly inn í Java kóða með því að nota JIT samantekt.
Heimild: opennet.ru

