Udgivelse af Java SE 22 platform og OpenJDK 22 åben reference implementering

Efter seks måneders udvikling har Oracle frigivet Java SE 22 (Java Platform, Standard Edition 22) platformen, som bruger OpenJDK open source-projektet som referenceimplementering. Med undtagelse af fjernelse af nogle forældede funktioner, bevarer Java SE 22 bagudkompatibilitet med tidligere udgivelser af Java-platformen - de fleste tidligere skrevne Java-projekter vil stadig fungere uden ændringer, når de køres under den nye version. Klar til at installere builds af Java SE 22 (JDK, JRE og Server JRE) er forberedt til Linux (x86_64, AArch64), Windows (x86_64) og macOS (x86_64, AArch64). Java 22-referenceimplementeringen er udviklet af OpenJDK-projektet og er fuldt åben under GPLv2-licensen med GNU ClassPath-undtagelser for at tillade dynamiske links til kommercielle produkter.

Java SE 22 er klassificeret som en almindelig supportudgivelse og vil fortsætte med at modtage opdateringer indtil næste udgivelse. LTS-grenen (Long Term Support) bør være Java SE 21 eller Java SE 17, som vil modtage opdateringer indtil henholdsvis 2031 og 2029 (generelt tilgængelig indtil 2028 og 2026). Offentlig støtte til LTS-grenen af ​​Java SE 11 sluttede i september sidste år, men udvidet support vil fortsætte indtil 2032. Udvidet support til LTS-grenen af ​​Java SE 8 vil fortsætte indtil 2030.

Lad os minde dig om, at fra og med udgivelsen af ​​Java 10 skiftede projektet til en ny udviklingsproces, hvilket indebar en kortere cyklus for dannelsen af ​​nye udgivelser. Ny funktionalitet udvikles nu i én konstant opdateret mastergren, som omfatter færdige ændringer, og hvorfra filialer forgrenes hvert halve år for at stabilisere nye udgivelser.

Nye funktioner i Java 22 inkluderer:

  • G1 garbage collector inkluderer understøttelse af region pinning, som giver dig mulighed for midlertidigt at rette placeringen af ​​Java-objekter i hukommelsen for at undgå, at de flyttes af garbage collector og for at tillade, at referencer til disse objekter kan overføres sikkert mellem Java og native kode. Fastgørelse giver dig mulighed for at reducere latens og undgå at deaktivere affaldsindsamling, når du udfører kritiske områder af JNI (Java Native Interface) med indbygget kode (mens du udfører disse sektioner, bør JVM ikke flytte kritiske objekter, der er knyttet til dem, for at undgå raceforhold). Fastgørelse fjerner kritiske genstande fra syne af skraldeopsamleren, som kan fortsætte med at rydde op i områder, der ikke er fastgjort.
  • En foreløbig funktion er blevet tilføjet for at tillade, at udtryk specificeres i konstruktører, før de kalder super(...), bruges til eksplicit at kalde en overordnet klassekonstruktør fra en nedarvet klassekonstruktør, hvis disse udtryk ikke refererer til en instans oprettet af konstruktøren. klasse Ydre { void hello() { System.out.println("Hej"); } klasse Indre { Indre() { hej(); super(); } } }
  • FFM (Foreign Function & Memory) API er blevet stabiliseret, hvilket muliggør interaktion af Java-programmer med ekstern kode og data ved at kalde funktioner fra eksterne biblioteker og få adgang til hukommelse uden for JVM, uden at ty til at bruge JNI (Java Native Interface).
  • Understøttelse af unavngivne variabler og mønstermatchning er blevet aktiveret - i stedet for ubrugte men nødvendige variabler og mønstre, når du kalder, kan du nu angive tegnet "_". // was String pageName = switch (page) { case GitHubIssuePage(var url, var content, var links, int issueNumber) -> “ISSUE #” + issueNumber; ... }; // nu kan du String pageName = switch (page) { case GitHubIssuePage(_, _, _, int issueNumber) -> “ISSUE #” + issueNumber; };
  • En foreløbig implementering af Class-File API er foreslået til at parse, generere og konvertere Java-klassefiler. 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); } } });
  • Java-værktøjet giver mulighed for at køre Java-programmer, der leveres i form af flere kodefiler eller prækompilerede klassebiblioteker, uden at kompilere disse filer separat og uden at konfigurere byggesystemet. Den nye funktion gør det nemmere at køre programmer, hvor koden for forskellige klasser er adskilt i separate filer. Prog.java: class Prog { public static void main(String[] args) { Helper.run(); } } Helper.java: class Helper { static void run() { System.out.println("Hej!"); } }

    For eksempel, for at køre et program bestående af to filer "Prog.java" og "Helper.java" er det nu tilstrækkeligt at køre "java Prog.java", som vil kompilere Prog-klassen, definere en reference til Helper-klassen, find og kompiler Helper-filen java og kald hovedmetoden.

  • Tilføjet en anden foreløbig implementering af strengskabeloner, implementeret ud over strenge bogstaver og tekstblokke. Strengskabeloner giver dig mulighed for at kombinere tekst med beregnede udtryk og variabler uden at bruge +-operatoren. Substitution af udtryk udføres ved hjælp af substitutioner \{..}, og specielle handlere kan tilsluttes for at kontrollere rigtigheden af ​​de substituerede værdier. For eksempel tjekker SQL-motoren de værdier, der erstattes i SQL-koden, og returnerer et java.sql.Statement-objekt som output, mens JSON-processoren overvåger korrektheden af ​​JSON-substitutionerne og returnerer en JsonNode. String query = "SELECT * FROM Person p WHERE p." + ejendom + " = '" + værdi + "'"; // was Statement query = SQL."""SELECT * FROM Person p WHERE p.\{property} = '\{værdi}'""""; // blev til
  • En syvende forhåndsvisning af Vector API er blevet tilføjet, som giver funktioner til vektorberegninger, der udføres ved hjælp af vektorinstruktioner på x86_64- og AArch64-processorer og tillader operationer at blive anvendt samtidigt på flere værdier (SIMD). I modsætning til funktionerne i HotSpot JIT-kompileren til autovektorisering af skalaroperationer, gør den nye API det muligt eksplicit at kontrollere vektorisering til parallel databehandling.
  • Der er tilføjet en foreløbig implementering af det udvidede Stream API, der understøtter at definere dine egne mellemliggende operationer, hvilket kan være nyttigt i tilfælde, hvor eksisterende indbyggede mellemliggende operationer ikke er tilstrækkelige til den ønskede datatransformation. Native handlere er forbundet ved hjælp af den nye mellemliggende operation Stream::gather(Gatherer), som behandler streamelementer ved at anvende en brugerspecificeret handler på dem. 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]]
  • En anden version af den eksperimentelle API for Structured Concurrency er blevet foreslået til test, som forenkler udviklingen af ​​multi-threaded applikationer ved at behandle flere opgaver udført i forskellige tråde som en enkelt blok.
  • Tilføjet en anden foreløbig implementering af implicit erklærede klasser og unavngivne forekomster af "hoved"-metoden, som kan undvære offentlige/statiske erklæringer, videregivelse af en række argumenter og andre entiteter forbundet med en klasseerklæring. // var offentlig klasse HelloWorld { public static void main(String[] args) { System.out.println("Hello world!"); } } // nu kan du annullere main() { System.out.println("Hej, verden!"); }
  • Tilføjet en anden preview-implementering af Scoped Values, der tillader uforanderlige data at blive delt på tværs af tråde og data udvekslet effektivt mellem underordnede tråde (værdier er nedarvet). Scoped Values ​​er ved at blive udviklet til at erstatte tråd-lokale variabler-mekanismen og er mere effektive, når der bruges meget store antal virtuelle tråde (tusinder eller millioner af tråde). Den største forskel mellem Scoped Values ​​og tråd-lokale variabler er, at førstnævnte er skrevet én gang, ikke kan ændres i fremtiden og kun forbliver tilgængelige i løbet af trådens udførelse.
  • Parallel affaldsopsamleren har forbedret ydeevne, når du arbejder med store arrays af genstande. Optimering gjorde det muligt i nogle test med store arrays af objekter at reducere forsinkelsen, før man begyndte at søge efter et objekt med 20 %.

Derudover kan du bemærke offentliggørelsen af ​​en opdatering til platformen til oprettelse af applikationer med en grafisk grænseflade JavaFX 22.

Kilde: opennet.ru

Tilføj en kommentar