Java SE 23 ja OpenJDK 23 julkaistiin

Kuuden kuukauden kehitystyön jälkeen Oracle julkaisi Java SE 23 -alustan (Java Platform, Standard Edition 23), joka käyttää avoimen lähdekoodin OpenJDK-projektia referenssitoteutuksena. Joidenkin vanhentuneiden ominaisuuksien poistamista lukuun ottamatta Java SE 23 säilyttää taaksepäin yhteensopivuuden Java-alustan aikaisempien julkaisujen kanssa - useimmat aiemmin kirjoitetut Java-projektit toimivat ilman muutoksia, kun ne suoritetaan uudessa versiossa. Java SE 22:n (JDK, JRE ja Server JRE) asennusvalmiit koontiversiot on valmistettu Linuxille (x86_64, AArch64), Windowsille (x86_64) ja macOS:lle (x86_64, AArch64). OpenJDK-projektin kehittämä Java 23 -viitetoteutus on täysin avoimen lähdekoodin GPLv2-lisenssin alainen GNU ClassPath -poikkeuksilla, jotka mahdollistavat dynaamisen linkityksen kaupallisiin tuotteisiin.

Java SE 23 on luokiteltu tavalliseksi tukijulkaisuksi, ja se saa päivityksiä seuraavaan julkaisuun saakka. Long Term Support (LTS) -haaran tulisi olla Java SE 21 tai Java SE 17, jotka saavat päivitykset vuoteen 2031 ja 2029 asti (yleensä saatavilla vuoteen 2028 ja 2026 asti). Jatkettu tuki Java SE 8:n LTS-haaralle kestää vuoteen 2030 ja Java SE 11:lle vuoteen 2032 asti.

Java SE:ssä ehdotetun 23 innovaation joukossa:

  • ZGC (Generation Z Garbage Collector) -jätteenkeräimen generatiivinen toimintatila on oletusarvoisesti käytössä käyttämällä "vanhojen" ja "nuorten" kohteiden erillistä käsittelyä, mikä tehostaa äskettäin luotujen, lyhyen käyttöiän omaavien kohteiden puhdistamista. Generational ZGC:n käyttö vähentää jumiutumisriskiä resurssien allokoinnin aikana, vähentää suorittimen kuormitusta ja muistin kulutusta roskienkeräyksen aikana. Generational ZGC:n testaus Apache Cassandra 4:llä osoitti 4-kertaisen suorituskyvyn lisääntyneen kiinteällä kasan koolla ja neljänneksen pienemmän kasan koon jatkuvalla suorituskyvyllä.
  • JavaDoc on lisännyt tuen Markdownin käyttämiselle koodin dokumentoimiseen kommenteissa, joita voidaan käyttää HTML- ja JavaDoc @ -tunnisteiden sekoituksen sijaan.
    Java SE 23 ja OpenJDK 23 julkaistiin
  • Kuvioiden sovitusmekanismeja on parannettu alustavalla tuella primitiivityyppien (int, byte, char ja muut ei-objektiperustyypit) käytölle kaikenlaisissa malleissa, "instanceof"-käskyssä ja "switch"-lohkoissa. kytkin (x.getStatus()) { tapaus 0 -> "okei"; tapaus 1 -> "varoitus"; tapaus 2 -> "virhe"; case int i -> ”tuntematon tila: ” + i; } if (i-instanssi tavusta b) { … b … }
  • Lisätty alustava tuki yhden "import module M" -käskyn käyttämiselle kaikkien tietyn moduulin viemien pakettien tuomiseksi kerralla. Muutos yksinkertaistaa merkittävästi modulaaristen kirjastojen uudelleenkäyttöä, jolloin voit sisällyttää kirjastoja ja luokkia määrittämättä niiden paikkaa pakettihierarkiassa. Esimerkiksi "import module java.base" määrittäminen tuo kaikki 54 java.base-moduuliin sisältyvää pakettia, jotka olisi aiemmin pitänyt mainita erikseen ("import java.io.*", "import java.util.*" ” jne.).

    Class-File API:n toista alustavaa toteutusta ehdotetaan Java-luokkatiedostojen jäsentämiseen, luomiseen ja muuntamiseen. ClassFile cf = ClassFile.of(); ClassModel classModel = cf.parse(bytes); tavu[] newBytes = cf.build(classModel.thisClass().asSymbol(), classBuilder -> { for (ClassElement ce : classModel) { if (!(ce instanssi MethodModel mm && mm.methodName().stringValue(). startsWith("debug"))) { classBuilder.with(ce);

  • Vector API:n kahdeksas esikatselu tarjoaa toimintoja vektorilaskelmille, jotka suoritetaan vektorikäskyjen avulla x86_64- ja AArch64-prosessoreissa ja mahdollistavat toimintojen soveltamisen samanaikaisesti useisiin arvoihin (SIMD). Toisin kuin HotSpot JIT -kääntäjän tarjoamat ominaisuudet skalaarioperaatioiden automaattiseen vektorointiin, uusi API mahdollistaa vektorisoinnin eksplisiittisen ohjauksen rinnakkaista tietojenkäsittelyä varten.
  • Java.io.Console-luokkaan on lisätty muoto-, printf-, readPassword- ja readLine-menetelmät tekstin muotoilemiseksi, näyttämiseksi ja lukemiseksi valitun kielialueen perusteella. System.console().printf(Locale.FRANCE, "%1$tY-%1$tB-%1$te %1$tA", new Date()) 2024-mai-16 jeudi
  • Laajennetun Stream API:n toinen esikatselutoteutus on lisätty, joka tukee omien välitoimintojen määrittelyä, mikä voi olla hyödyllistä tapauksissa, joissa olemassa olevat sisäänrakennetut välioperaatiot eivät riitä haluttuun datamuunnokseen. Natiivikäsittelijät yhdistetään uudella välioperaatiolla Stream::gather(Gatherer), joka käsittelee stream-elementtejä soveltamalla niihin käyttäjän määrittämää käsittelijää. 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]]
  • Lisätty kolmas alustava toteutus implisiittisesti ilmoitetuista luokista ja "pää"-metodin nimeämättömistä ilmentymistä, joka voi luopua julkisista/staattisista ilmoituksista, argumenttijoukon välittämisestä ja muista luokkailmoitukseen liittyvistä yksiköistä. // oli julkinen luokka HelloWorld { public static void main(String[] args) { System.out.println("Hei maailma!"); } } // nyt voit void main() { System.out.println("Hei, maailma!"); }
  • Lisätty toinen esikatselu ominaisuudesta, jonka avulla rakentajat voivat määrittää lausekkeita ennen super(...) kutsumista. Käytetään kutsumaan eksplisiittisesti pääluokan rakentajaa perityn luokan konstruktorista, jos nämä lausekkeet eivät viittaa rakentajan luomaan ilmentymään. class Ulompi { void hello() { System.out.println("Hei"); } class Sisäinen { Sisäinen() { hei(); super(); } } }
  • Lisätty Scoped Values ​​-sovelluksen kolmas esikatselutoteutus, joka mahdollistaa muuttumattomien tietojen jakamisen säikeiden välillä ja tietojen tehokkaan vaihdon alatason säikeiden välillä (arvot peritään). Scoped Values ​​-arvoja kehitetään korvaamaan säikeen paikallisten muuttujien mekanismi, ja ne ovat tehokkaampia käytettäessä erittäin suuria määriä virtuaalisia säikeitä (tuhansia tai miljoonia säikeitä). Suurin ero Scope-arvojen ja säikeen paikallisten muuttujien välillä on se, että ensimmäiset kirjoitetaan kerran, niitä ei voi muuttaa tulevaisuudessa ja ne ovat käytettävissä vain säikeen suorituksen ajan.
  • Testattavaksi on ehdotettu kolmatta Structured Concurrency API:n esikatselua, joka yksinkertaistaa monisäikeisten sovellusten kehittämistä käsittelemällä useita eri säikeissä suoritettuja tehtäviä yhtenä lohkona.
  • Sun.misc.Unsafe-luokan tarjoamat ulkoisen muistin käyttötavat (JVM:n ulkopuolella) on vanhentunut ja ajoitettu poistettavaksi. Jos haluat käyttää keon ulkopuolista muistia ja olla vuorovaikutuksessa ulkoisen koodin kanssa, on suositeltavaa käyttää VarHandle API:ta ja FFM (Foreign Function & Memory) API:ta.

Lisäksi voimme huomata, että JavaFX 23 graafisella käyttöliittymällä varustettujen sovellusten luomisalustaan ​​on julkaistu päivitys ja GraalVM JIT -kääntäjä sisällytettiin Oracle JDK 23:n pääversioon.

Esittelyssä on myös uusi versio universaalista virtuaalikoneen GraalVM:stä, joka tukee käynnissä olevia sovelluksia JavaScriptillä (Node.js), Pythonilla, Rubylla, R:llä, kaikilla JVM:n kielillä (Java, Scala, Clojure, Kotlin) ja kielillä ​​joille voidaan luoda LLVM-bittikoodi (C , C++, Rust). JDK 23:n tuen lisäksi uusi versio optimoi muistin kulutuksen ja suoritettavan koodin koon ja tarjoaa täyden tuen työkaluille, joilla Python ja WebAssembly upotetaan Java-koodiin JIT-käännöksen avulla.

Lähde: opennet.ru

Lisää kommentti