Java SE 23 en OpenJDK 23 vrygestel

Na ses maande se ontwikkeling het Oracle die Java SE 23-platform (Java Platform, Standard Edition 23) gepubliseer, wat die open source OpenJDK-projek as 'n verwysingsimplementering gebruik. Met die uitsondering van die verwydering van sommige verouderde kenmerke, handhaaf Java SE 23 terugwaartse versoenbaarheid met vorige vrystellings van die Java-platform - die meeste voorheen geskrewe Java-projekte sal sonder veranderings werk wanneer dit onder die nuwe weergawe uitgevoer word. Gereed-vir-installeer bouwerk van Java SE 22 (JDK, JRE en Server JRE) is voorberei vir Linux (x86_64, AArch64), Windows (x86_64) en macOS (x86_64, AArch64). Ontwikkel deur die OpenJDK-projek, is die Java 23-verwysingsimplementering volledig oopbron onder die GPLv2-lisensie, met GNU ClassPath-uitsonderings wat dinamiese skakeling met kommersiële produkte toelaat.

Java SE 23 word geklassifiseer as 'n gereelde ondersteuningsvrystelling en sal voortgaan om opdaterings te ontvang tot die volgende vrystelling. Die Langtermyn Ondersteuning (LTS)-tak moet Java SE 21 of Java SE 17 wees, wat opdaterings tot onderskeidelik 2031 en 2029 sal ontvang (algemeen beskikbaar tot 2028 en 2026). Uitgebreide ondersteuning vir die LTS-tak van Java SE 8 sal tot 2030 duur, en Java SE 11 tot 2032.

Onder die 23 innovasies wat in Java SE voorgestel word:

  • Die generatiewe werkingsmodus van die ZGC (Generation Z Garbage Collector) vullisverwyderaar is by verstek geaktiveer, met behulp van afsonderlike verwerking van "ou" en "jong" voorwerpe, wat die doeltreffendheid van die skoonmaak van onlangs geskepte voorwerpe met 'n kort leeftyd verhoog. Die gebruik van Generational ZGC verminder die risiko van stalletjies tydens hulpbrontoewysing, verminder SVE-lading en geheueverbruik tydens vullisverwydering. Die toetsing van Generational ZGC met Apache Cassandra 4 het 'n 4x toename in deurset met 'n vaste hoopgrootte en 'n kwart vermindering in hoopgrootte met konstante deurset getoon.
  • JavaDoc het ondersteuning bygevoeg vir die gebruik van Markdown om kode in opmerkings te dokumenteer, wat gebruik kan word in plaas van 'n mengsel van HTML- en JavaDoc @-merkers.
    Java SE 23 en OpenJDK 23 vrygestel
  • Patroonpasmeganismes is verbeter met voorlopige ondersteuning vir die gebruik van primitiewe tipes (int, byte, char en ander nie-objek basiese tipes) in alle soorte sjablone, in die "instanceof" stelling, en in "switch" blokke. skakel (x.getStatus()) { geval 0 -> "okay"; geval 1 -> "waarskuwing"; geval 2 -> "fout"; geval int i -> "onbekende status: " + i; } if (i instansie van greep b) { … b … }
  • Bygevoeg voorlopige ondersteuning vir die gebruik van 'n enkele "invoer module M" verklaring om alle pakkette wat uitgevoer word deur 'n gespesifiseerde module op een slag in te voer. Die verandering vereenvoudig die hergebruik van modulêre biblioteke aansienlik, waardeur u biblioteke en klasse kan insluit sonder om hul plek in die pakkethiërargie te bepaal. As jy byvoorbeeld "import module java.base" spesifiseer, sal al 54 pakkette wat by die java.base-module ingesluit is, invoer, wat voorheen afsonderlik genoem moes word ("import java.io.*", "import java.util.* ” ens.).

    'n Tweede voorlopige implementering van die Class-File API word voorgestel vir die ontleding, generering en omskakeling van Java-klaslêers. ClassFile cf = ClassFile.of(); ClassModel classModel = cf.parse(grepe); byte[] newBytes = cf.build(classModel.thisClass().asSymbol(), classBuilder -> { for (ClassElement ce : classModel) { if (!(ce instanceof MethodModel mm && mm.methodName().stringValue(). beginWith("debug"))) { klasbouer.met(ce);

  • Die agtste voorskou van die Vector API bied funksies vir vektorberekeninge wat uitgevoer word met behulp van vektorinstruksies op x86_64- en AArch64-verwerkers en laat bewerkings toe om gelyktydig op veelvuldige waardes (SIMD) toegepas te word. Anders as die vermoëns wat in die HotSpot JIT-samesteller voorsien word vir outo-vektorisering van skalêre bewerkings, maak die nuwe API dit moontlik om vektorisering vir parallelle dataverwerking eksplisiet te beheer.
  • Het formaat-, printf-, readPassword- en readLine-metodes by die java.io.Console-klas gevoeg om teks te formateer, vertoon en lees op grond van die geselekteerde plek. System.console().printf(Locale.FRANCE, "%1$tY-%1$tB-%1$te %1$tA", nuwe Datum()) 2024-mei-16
  • 'n Tweede voorskou-implementering van die uitgebreide Stream API is bygevoeg wat die definisie van jou eie intermediêre bewerkings ondersteun, wat nuttig kan wees in gevalle waar bestaande ingeboude intermediêre bewerkings nie voldoende is vir die verlangde datatransformasie nie. Inheemse hanteerders word verbind met behulp van die nuwe intermediêre bewerking Stream::gather(Gatherer), wat stroomelemente verwerk deur 'n gebruiker-gespesifiseerde hanteerder op hulle toe te pas. 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]]
  • Bygevoeg 'n derde voorlopige implementering van implisiet verklaarde klasse en naamlose gevalle van die "hoof" metode, wat kan afsien van publieke/statiese verklarings, deur 'n verskeidenheid argumente deur te gee, en ander entiteite wat met 'n klasverklaring geassosieer word. // was publieke klas HelloWorld { publieke statiese leemte hoof(String[] args) { System.out.println("Hallo wêreld!"); } } // nou kan jy main() { System.out.println("Hallo, Wêreld!") ongeldig maak; }
  • Bygevoeg 'n tweede voorskou van 'n kenmerk wat konstrukteurs toelaat om uitdrukkings te spesifiseer voordat super(...) geroep word, wat gebruik word om 'n ouerklas se konstruktor uitdruklik van 'n geërfde klas se konstruktor te noem as daardie uitdrukkings nie verwys na 'n instansie wat deur die konstruktor geskep is nie. klas Buitenste { void hallo() { System.out.println("Hallo"); } klas Inner { Inner() { hallo(); super(); } } }
  • Het 'n derde voorskou-implementering van Scoped Values ​​bygevoeg, wat toelaat dat onveranderlike data oor drade gedeel word en data doeltreffend tussen kinderdrade uitgeruil kan word (waardes word geërf). Omvangwaardes word ontwikkel om die draad-plaaslike veranderlikes-meganisme te vervang en is meer doeltreffend wanneer baie groot getalle virtuele drade (duisende of miljoene drade) gebruik word. Die belangrikste verskil tussen Scoped Values ​​en draad-plaaslike veranderlikes is dat eersgenoemde een keer geskryf word, nie in die toekoms verander kan word nie en slegs beskikbaar bly vir die duur van die draad se uitvoering.
  • 'n Derde voorskou van die Structured Concurrency API is voorgestel vir toetsing, wat die ontwikkeling van multi-threaded toepassings vereenvoudig deur verskeie take wat in verskillende drade as 'n enkele blok loop, te verwerk.
  • Die eksterne geheue toegang metodes (buite die JVM) verskaf deur die sun.misc.Unsafe klas is afgekeur en geskeduleer vir verwydering. Om toegang te verkry tot buite-hoop geheue en interaksie met eksterne kode, word dit aanbeveel om die VarHandle API en die FFM (Foreign Function & Memory) API te gebruik.

Daarbenewens kan ons let op die publikasie van 'n opdatering aan die platform vir die skep van toepassings met die JavaFX 23 grafiese koppelvlak en die insluiting van die GraalVM JIT samesteller in die hoof Oracle JDK 23.

Ook aangebied is 'n nuwe vrystelling van die universele virtuele masjien GraalVM, wat lopende toepassings in JavaScript (Node.js), Python, Ruby, R, enige tale vir die JVM (Java, Scala, Clojure, Kotlin) en tale ondersteun ​waarvoor LLVM-biskode gegenereer kan word (C , C++, Rust). Benewens die ondersteuning van JDK 23, optimaliseer die nuwe weergawe geheueverbruik en die grootte van uitvoerbare kode, en bied volledige ondersteuning vir gereedskap vir die inbedding van Python en WebAssembly in Java-kode met behulp van JIT-samestelling.

Bron: opennet.ru

Voeg 'n opmerking