Java SE 23 un OpenJDK 23 izlaišana.

Pēc sešu mēnešu izstrādes uzņēmums Oracle publicēja Java SE 23 (Java Platform, Standard Edition 23) platformu, kuras atsauces īstenojums ir atvērtais projekts OpenJDK. Izņemot dažādu novecojušu iespēju noņemšanu, Java SE 23 saglabā atpakaļsaderību ar iepriekšējiem Java izlaidumiem — lielākā daļa iepriekš rakstīto Java projektu darbosies bez izmaiņām, izmantojot jauno versiju. Gatavas instalējamas Java SE 22 (JDK, JRE un Server JRE) versijas ir sagatavotas Linux (x86_64, AArch64), Windows (x86_64) un macOS (x86_64, AArch64). OpenJDK ietvaros izstrādātā Java 23 atsauces īstenojums pilnībā ir atvērts GPLv2 licencei ar GNU ClassPath izņēmumiem, kas ļauj dinamisku saistīšanu ar komerciāliem produktiem.

Java SE 23 ir klasificēts kā izlaidums ar parastu atbalsta laiku, un atjauninājumi tam tiks izlaisti līdz nākamajam izlaidumam. Kā ilgi atbalstīta (LTS) versija ieteicams izmantot Java SE 21 vai Java SE 17, kuru atjauninājumi tiks izlaisti līdz 2031. un 2029. gadam attiecīgi (publiski — līdz 2028. un 2026. gadam). Paplašinātais atbalsts LTS dublim Java SE 8 turpināsies līdz 2030. gadam, bet Java SE 11 — līdz 2032. gadam.

Starp Java SE 23 piedāvātajām jaunām funkcijām ir:

  • Pēc noklusējuma ir iekļauts generatīvais režīms ZGC (Generational Z Garbage Collector), kas izmanto atsevišķu apstrādi "vecajiem" un "jaunajiem" objektiem, kas uzlabo nesen izveidoto objektu tīrīšanas efektivitāti ar īsu mūža ilgumu. Generational ZGC izmantošana samazina riskus atlikumu pārtraukumos resursu piešķiršanas laikā un samazina CPU slodzi un atmiņas patēriņu atkritumu savākšanas laikā. Testēšana ar Apache Cassandra 4 parādīja četras reizes lielāku caurlaidspēju pie fiksētas kaudzes (heap) izmēra un kaudzes samazinājumu par ceturto daļu, saglabājot nemainīgu caurlaidspēju.
  • JavaDoc ir pievienota atbalsts Markdown marķējuma izmantošanai koda dokumentēšanai komentāros, ko var izmantot kā alternatīvu jauktās HTML un @-JavaDoc tagu izmantošanai.
    Java SE 23 un OpenJDK 23 izlaišana.
  • Paraugu atbilstības mehānismi ir paplašināti ar priekšizvēles atbalstu primitīvo tipu (int, byte, char un citu pamata tipu, kas nav objekts) izmantošanai visos veidu veidnēs, operatorā „instanceof” un „switch” blokos. switch (x.getStatus()) { case 0 -> „labi”; case 1 -> „brīdinājums”; case 2 -> „kļūda”; case int i -> „nezināms statuss: ” + i; } if (i instanceof byte b) { … b … }
  • Pievienots priekšizvēles atbalsts „import module M” izteikuma izmantošanai, lai importētu visus pakotnes, ko eksportē norādītais modulis. Šī izmaiņa būtiski vienkāršo moduļu bibliotēku atkārtotu izmantošanu, ļaujot pievienot bibliotēkas un klases bez to atrašanās vietas noteikšanas pakotņu hierarhijā. Piemēram, norādot „import module java.base”, tiks importētas visas 54 pakotnes, kas ietilpst modulī java.base, kuras agrāk būtu jāmin atsevišķi („import java.io.*”, „import java.util.*” utt.).

    Ieteikta otrā priekšizvēles API Class-File ieviešana Java klasifikācijas failu analīzei, ģenerēšanai un pārvēršanai. ClassFile cf = ClassFile.of(); ClassModel classModel = cf.parse(bytes); byte[] newBytes = cf.build(classModel.thisClass().asSymbol(), classBuilder -> { for (ClassElement ce : classModel) { if (!(ce instanceof MethodModel mm && mm.methodName().stringValue().startsWith(„debug”))) { classBuilder.with(ce); } } });

  • Ieteikta astotā priekšizvēles API Vector ieviešana, kas nodrošina funkcijas vektoru aprēķiniem, kas tiek veikti, izmantojot x86_64 un AArch64 procesoru vektoru instrukcijas un ļauj vienlaikus piemērot operācijas vairākām vērtībām (SIMD). Atšķirībā no JIT kompilatora HotSpot sniegtajām automātiskās vektorēšanas iespējām skalarajām operācijām, jaunais API ļauj skaidri pārvaldīt vektorēšanu paralēlu datu apstrādei.
  • Java klases java.io.Console ir pievienotas metodes format, printf, readPassword un readLine teksta formatēšanai, izvadīšanai un lasīšanai, ņemot vērā izvēlēto lokalizāciju. System.console().printf(Locale.FRANCE, „%1$tY-%1$tB-%1$te %1$tA”, new Date()) 2024-mai-16 ceturtdiena
  • Tika pievienota otrā priekšizstrāde paplašinātajam API Stream, kas atbalsta lietotāja definētu starpposma operāciju noteikšanu, kas var izrādīties noderīgas gadījumos, kad esošās iebūvētās starpposma operācijas nav pietiekamas vēlamajai datu pārveidošanai. Lietotāja pievienotie apstrādātāji tiek pievienoti, izmantojot jauno starpposma operāciju Stream::gather(Gatherer), kas apstrādā straumes elementus, pielietojot lietotāja norādīto apstrādātāju. 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]]
  • Tika pievienota trešā priekšizstrāde nereģistrētiem klasēm un bezvārda instancēm metodei „main”, kurās var iztikt bez public/statiskajiem paziņojumiem, argumentu masīva nodošanas un citām klasēm saistītām entitātēm. // agrāk public class HelloWorld { public static void main(String[] args) { System.out.println("Hello world!"); } } // tagad var void main() { System.out.println("Hello, World!"); }
  • Tika pievienots otrais priekšizstrādes variants iespējamībai, kas ļauj norādīt konstruktoros izteiksmes pirms super(...) izsaukuma, kas tiek izmantots, lai tieši izsauktu vecāku klases dekoratoru no mantotā klases dekoratora, ja šie izteikumi nesauc uzreiz izveidoto dekodētāja instanci. class Outer { void hello() { System.out.println("Hello"); } class Inner { Inner() { hello(); super(); } } }
  • Tika pievienota trešā priekšizstrāde ierobežotām vērtībām (Scoped Values), kas ļauj koplietot nemainīgas datu straumes un efektīvi apmainīties ar datiem starp bērnu straumēm (vērtības tiek mantotas). Scoped Values tiek attīstītas, lai aizstātu pavedienu lokālās mainīgās (thread-local variables) mehānismu un ir efektīvākas, izmantojot ļoti lielu virtuālo pavedienu skaitu (tūkstošiem un miljoniem pavedienu). Galvenā atšķirība starp Scoped Values un pavedienu lokālajām mainīgajām ir tā, ka pirmās tiek ierakstītas vienreiz, tālāk nevar tikt mainītas un paliek pieejamas tikai izpildes laikā.
  • Ieteikts testēšanai trešais API priekšizstrādes variants strukturētajam paralelismam, kas atvieglo daudzu pavedienu programmu izstrādi, apstrādājot vairākas uzdevumu, kas tiek izpildīti dažādos pavedienos, kā vienotu bloku.
  • Ir pasludināti par novecojušiem un plānoti izņemšanai piekļuves metodes uz ārējo atmiņu (ārpus JVM), ko sniedz klase sun.misc.Unsafe. Lai piekļūtu atmiņai ārpus kaudzes un mijiedarbotos ar ārējo kodu, ieteicams izmantot API VarHandle un API FFM (Foreign Function & Memory).

Papildus var atzīmēt platformas atjauninājuma publicēšanu JavaFX 23 grafisko interfeisu lietotņu izstrādei un iekļaušanu pamatkomplektā Oracle JDK 23 JIT kompilatoru GraalVM.

Tāpat tika prezentēts jaunais universālās virtuālās mašīnas GraalVM izlaidums, kas atbalsta programmu palaišanu JavaScript (Node.js), Python, Ruby, R, jebkurās valodās, kas paredzētas JVM (Java, Scala, Clojure, Kotlin), un valodās, kurām var veidot bitkodu LLVM (C, C++, Rust). Papildus JDK 23 atbalstam jaunajā versijā ir optimizēta atmiņas patēriņa un izpildkoda lieluma samazināšana, kā arī pilnvērtīga atbalsta sniegšana Python un WebAssembly iekļaušanai Java kodā, izmantojot JIT kompilāciju.

Avots: opennet.lv

Iegādājieties uzticamu tīmekļa hostingu ar DDoS aizsardzību, VPS VDS serveriem 🔥 Iegādājieties uzticamu tīmekļa hostingu ar DDoS aizsardzību, VPS VDS serveriem | ProHoster