Utgivning av Java SE 23 och OpenJDK 23

Efter sex mĂ„naders utveckling har Oracle publicerat plattformen Java SE 23 (Java Platform, Standard Edition 23), dĂ€r OpenJDK anvĂ€nds som referensimplementation. Förutom att vissa förĂ„ldrade funktioner har tagits bort bevaras bakĂ„tkompatibiliteten med tidigare versioner av Java-plattformen i Java SE 23 – de flesta tidigare skrivna Java-projekt kommer att fungera utan Ă€ndringar vid körning under den nya versionen. Installerbara versioner av Java SE 22 (JDK, JRE och Server JRE) Ă€r tillgĂ€ngliga för Linux (x86_64, AArch64), Windows (x86_64) och macOS (x86_64, AArch64). Den referensimplementation av Java 23 som utvecklats inom ramen för OpenJDK-projektet Ă€r helt öppen under GPLv2-licensen med undantag för GNU ClassPath, som tillĂ„ter dynamisk lĂ€nkning med kommersiella produkter.

Java SE 23 klassificeras som en version med vanlig supportperiod, dÀr uppdateringar kommer att slÀppas fram till nÀsta version. För lÄngsiktig support (LTS) bör Java SE 21 eller Java SE 17 anvÀndas, med uppdateringar som kommer att slÀppas fram till 2031 respektive 2029 (allmÀnt tillgÀngliga till 2028 och 2026). Den utökade supporten för LTS-versionen av Java SE 8 kommer att pÄgÄ till 2030, medan Java SE 11 kommer att stödjas fram till 2032.

Bland nyheterna i Java SE 23:

  • Generativ lĂ€ge för ZGC (Generational Z Garbage Collector) Ă€r nu aktiverat som standard, vilket anvĂ€nder separat hantering av "gamla" och "unga" objekt för att öka effektiviteten av rensning av nyligen skapade objekt med kort livslĂ€ngd. AnvĂ€ndningen av Generational ZGC minskar risken för pauser under resursallokering och sĂ€nker CPU-belastningen samt minnesförbrukningen vid skrĂ€phantering. Testning av Generational ZGC med Apache Cassandra 4 visade en fyrfaldig ökning av genomströmning vid konstant storlek pĂ„ heap och en minskning av heap-storleken med en fjĂ€rdedel vid oförĂ€ndrad genomströmning.
  • JavaDoc har fĂ„tt stöd för att anvĂ€nda Markdown-syntax för att dokumentera kod i kommentarer, vilket kan anvĂ€ndas istĂ€llet för en blandning av HTML och @-taggar i JavaDoc.
    Utgivning av Java SE 23 och OpenJDK 23
  • Mekanismen för mönsterigenkĂ€nning har utvidgats med preliminĂ€rt stöd för anvĂ€ndning av primitiva typer (int, byte, char och andra grundlĂ€ggande typer som inte Ă€r objekt) i alla typer av mallar, i operatorn "instanceof" och i "switch"-block. switch (x.getStatus()) { case 0 -> "okay"; case 1 -> "warning"; case 2 -> "error"; case int i -> "unknown status: " + i; } if (i instanceof byte b) { 
 b 
 }
  • PreliminĂ€rt stöd har lagts till för att anvĂ€nda ett uttryck "import module M" för att importera alla paket som exporteras av det angivna modul. Ändringen förenklar avsevĂ€rt Ă„teranvĂ€ndning av modulbibliotek, vilket gör det möjligt att ansluta bibliotek och klasser utan att specificera deras plats i paketets hierarki. Till exempel kommer angivandet av "import module java.base" att importera alla 54 paket som ingĂ„r i modulen java.base, som tidigare skulle behöva nĂ€mnas separat ("import java.io.*", "import java.util.*" etc.).

    En andra preliminÀr implementation av API:et Class-File för att analysera, generera och konvertera Java-klassfiler har föreslagits. 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); } } });

  • En Ă„ttonde preliminĂ€r implementation av API:et Vector som tillhandahĂ„ller funktioner för vektorberĂ€kningar har föreslagits, dĂ€r berĂ€kningarna utförs med hjĂ€lp av vektorinstruktioner frĂ„n processorer x86_64 och AArch64, vilket möjliggör att flera vĂ€rden kan bearbetas samtidigt (SIMD). Till skillnad frĂ„n de möjligheter som erbjuds av JIT-kompilatorn HotSpot för autovektorisering av skalĂ€ra operationer, ger det nya API:et möjlighet att explicit styra vektorising för parallell databehandling.
  • Metoderna format, printf, readPassword och readLine för klass java.io.Console har lagts till för att formatera, skriva ut och lĂ€sa text med hĂ€nsyn till vald lokal. System.console().printf(Locale.FRANCE, "%1$tY-%1$tB-%1$te %1$tA", new Date()) 2024-mai-16 torsdag
  • Den andra förhandsversionen av det utvidgade Stream API har lagts till, vilket stödjer definiering av egna mellanliggande operationer som kan vara anvĂ€ndbara i de fall dĂ€r de befintliga inbyggda mellanliggande operationerna inte rĂ€cker till för önskad datakonvertering. Egna handlare kopplas in med hjĂ€lp av den nya mellanliggande operationen Stream::gather(Gatherer), som bearbetar strömelement genom att tillĂ€mpa en anvĂ€ndardefinierad handlare. 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]]
  • Den tredje förhandsversionen av implicit deklarerade klasser och anonyma instanser av metoden "main" har lagts till, dĂ€r man kan klara sig utan deklarationer sĂ„som public/static, överföring av argumentarray och andra entiteter relaterade till klassdeklarationen. // tidigare public class HelloWorld { public static void main(String[] args) { System.out.println("Hello world!"); } } // nu kan man void main() { System.out.println("Hello, World!"); }
  • Den andra förhandsversionen har lagts till av en funktionalitet som tillĂ„ter angivande av uttryck i konstruktorer före anropet av super(...), som anvĂ€nds för att explicit anropa förĂ€ldraklassens konstruktor frĂ„n den Ă€rvda klassens konstruktor, om dessa uttryck inte refererar till instansen som skapats av konstruktorn. class Outer { void hello() { System.out.println("Hello"); } class Inner { Inner() { hello(); super(); } } }
  • Den tredje förhandsversionen av Scoped Values har lagts till, vilket tillĂ„ter delning av oförĂ€nderliga data mellan trĂ„dar och effektivt utbyte av data mellan barntrĂ„dar (vĂ€rden Ă€rver). Scoped Values utvecklas för att ersĂ€tta mekanismen för trĂ„d-lokala variabler (thread-local variables) och Ă€r mer effektiva nĂ€r det anvĂ€nds ett mycket stort antal virtuella trĂ„dar (tusentals och miljontals trĂ„dar). Den huvudsakliga skillnaden mellan Scoped Values och trĂ„d-lokala variabler Ă€r att de förstnĂ€mnda skrivs en gĂ„ng, kan inte Ă€ndras i framtiden och förblir endast tillgĂ€ngliga under trĂ„dens körning.
  • Den tredje preliminĂ€ra API-versionen för strukturerad samtidighet (Structured Concurrency) som föreslĂ„s för testning förenklar utvecklingen av flertrĂ„diga applikationer genom att hantera flera uppgifter som körs i olika trĂ„dar som en enhetlig block.
  • Metoder för Ă„tkomst till extern minne (utanför JVM) som tillhandahĂ„lls av klassen sun.misc.Unsafe har förklarats som förĂ„ldrade och planeras att tas bort. För Ă„tkomst till minne utanför heapen och interaktion med extern kod rekommenderas API:erna VarHandle och FFM (Foreign Function & Memory).

Dessutom kan nÀmnas publiceringen av plattformsuppdateringen för att skapa applikationer med grafiskt anvÀndargrÀnssnitt JavaFX 23 och inkluderingen av JIT-kompilatorn GraalVM i Oracle JDK 23.

Även en ny version av den universella virtuella maskinen GraalVM har presenterats, som stöder körning av applikationer i JavaScript (Node.js), Python, Ruby, R, alla sprĂ„k för JVM (Java, Scala, Clojure, Kotlin) samt sprĂ„k för vilka LLVM-bitkod kan genereras (C, C++, Rust). Förutom att stödja JDK 23 har den nya versionen optimerat minnesanvĂ€ndning och storlek pĂ„ exekveringskod, med fullstĂ€ndigt stöd för att integrera Python och WebAssembly i Java-kod med hjĂ€lp av JIT-kompilering.

KĂ€lla: opennet.ru

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster