UtgÄvan av Java SE 24 och OpenJDK 24

Efter sex mĂ„naders utveckling har Oracle publicerat Java SE 24 (Java Platform, Standard Edition 24), vars referensimplementation anvĂ€nder det öppna projektet OpenJDK. Med undantag för att vissa förĂ„ldrade funktioner har tagits bort, bibehĂ„ller Java SE 24 bakĂ„tkompatibilitet med tidigare versioner av Java-plattformen — de flesta tidigare skrivna Java-projekt kommer att fungera utan förĂ€ndringar pĂ„ den nya versionen. InstallationsfĂ€rdiga paket för Java SE 24 (JDK, JRE och Server JRE) har förberetts för Linux (x86_64, AArch64), Windows (x86_64) och macOS (x86_64, AArch64). Den referensimplementation som utvecklats inom ramen för OpenJDK-projektet Ă€r helt öppen under GPLv2-licensen med undantag för GNU ClassPath, vilket möjliggör dynamisk lĂ€nkning med kommersiella produkter.

Java SE 24 klassificeras som en release med vanlig support, med uppdateringar som kommer att ges ut fram till nÀsta release. För lÄngsiktig support (LTS) bör Java SE 21 eller Java SE 17 anvÀndas, med uppdateringar fram till 2031 respektive 2029 (offentliga uppdateringar till 2028 och 2026). Den utökade stödet för LTS-grenen Java SE 8 kommer att fortsÀtta till 2030, medan Java SE 11 kommer att stödjas fram till 2032. Den nÀsta LTS-releasen blir höstreleasen Java SE 25.

Bland nyheterna i Java SE 24:

  • En experimentell generativ arbetslĂ€ge för garbage collector Shenandoah har föreslagits, dĂ€r gamla och nyligen skapade objekt behandlas separat för att öka effektiviteten i rena objekts livslĂ€ngd. Det nya lĂ€get ger mer förutsĂ€gbar genomströmning, motstĂ„ndskraft mot Ă€ndringar i belastning och minskat minnesförbrukning vid garbage collection. Shenandoah-schemalĂ€ggaren syftar till att minska stoppstid under garbage collection genom att utföra mer arbete parallellt med körande Java-applikationer.
  • I HotSpot JVM har experimentellt stöd för kompakta objektheaderar implementerats, vars storlek pĂ„ 64-bitarsystem har minskats frĂ„n 96 till 64 bitar (frĂ„n 12 till 8 byte). Minskningen av headerstorleken möjliggör en minskning av heapstorleken och ökar cacheeffektiviteten.
  • I G1-garbage collector har implementeringen av barriĂ€rer, som spĂ„rar applikationens Ă„tkomst till minnet, förenklats. I den nya versionen har operationerna för att expandera barriĂ€rer flyttats till ett senare skede av kompileringen i C2 JIT. Genomförda tester visar att en sĂ„dan flytt kan minska overheadkostnaderna i C2 JIT-kompilatorn med 10-20% beroende pĂ„ applikationen.
  • Ett API för anvĂ€ndning av kryptografiska funktioner för nyckelbildning (KDF, key derivation function) har lagts till, vilket möjliggör skapande av ytterligare nycklar av nödvĂ€ndig lĂ€ngd baserat pĂ„ en hemlig nyckel (till exempel ett lösenord) och en godtycklig uppsĂ€ttning data. KDF API har för nĂ€rvarande status som förhandsvisning (preview).
  • Möjligheten för förhandsvisning (Ahead-of-Time) av klassladdning och kompilering har lagts till. Denna Ă€ndring gör det möjligt att snabba upp starten av HotSpot JVM genom att tillhandahĂ„lla klasser som anvĂ€nds i applikationen i redan laddat och kompilationslĂ€ge. Vid första starten av applikationen Ă„terstĂ€lls tillstĂ„ndet för alla klasser till cachen och anvĂ€nds för att pĂ„skynda uppladdningen vid följande körningar.
  • API:t Class-File har lagts till för analys, generering och omvandling av Java-klassfiler.

    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); } } });

  • Ett utökat API Stream har lagts till, som stödjer definiering av egna mellanoperationer som kan vara anvĂ€ndbara nĂ€r de befintliga inbyggda mellanoperationerna inte rĂ€cker för önskad datatransformation. Egna hanterare ansluts via den nya mellanoperationen Stream::gather(Gatherer), som hanterar strömelement genom att tillĂ€mpa en anvĂ€ndardefinierad hanterare. 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 fjĂ€rde preliminĂ€ra implementationen av Scoped Values har föreslagits, vilket möjliggör gemensam anvĂ€ndning av oförĂ€nderliga data i trĂ„dar och effektiv datautbyte mellan undertrĂ„dar (vĂ€rden Ă€rvs). Scoped Values utvecklas för att ersĂ€tta mekanismen för trĂ„dspecifika variabler och Ă€r mer effektiva vid anvĂ€ndning av ett mycket stort antal virtuella trĂ„dar (tusentals och miljontals trĂ„dar). Den huvudsakliga skillnaden mellan Scoped Values och trĂ„dspecifika variabler Ă€r att de förstnĂ€mnda skrivs en gĂ„ng, kan sedan inte Ă€ndras och förblir tillgĂ€ngliga endast under körning av trĂ„den.
  • PreliminĂ€r 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 har lagts till mönstermatchningsmekanismen. switch (x.getStatus()) { case 0 -> "okay"; case 1 -> "warning"; case 2 -> "error"; case int i -> "unknown status: " + i; } if (i instanceof byte b) { 
 b 
 }
  • Den nionde preliminĂ€ra implementationen av API Vector har föreslagits, vilket erbjuder funktioner för vektorberĂ€kningar som utförs med hjĂ€lp av vektor instruktioner pĂ„ processorer x86_64 och AArch64 och möjliggör samtidig tillĂ€mpning av operationer pĂ„ flera vĂ€rden (SIMD). Till skillnad frĂ„n de funktioner för automatisk vektorisering av skalĂ€ra operationer som erbjuds av JIT-kompilatorn HotSpot, ger det nya API:et möjlighet att explicit styra vektoriseringen för parallell databehandling.
  • Stöd för synkronisering av virtuella trĂ„dar utan att de knyts (pinning) till plattformsrelaterade trĂ„dar har implementerats. Virtuella trĂ„dar i en synkroniserad metod eller uttryck i ett blockerat tillstĂ„nd frigör nu sin plattformstrĂ„d, vilket möjliggör för andra virtuella trĂ„dar att anvĂ€nda den, vilket avsevĂ€rt ökar antalet tillgĂ€ngliga virtuella trĂ„dar och förbĂ€ttrar skalbarheten hos applikationer som anvĂ€nder multitrĂ„dning.
  • En tredje preliminĂ€r version av möjligheten har lagts till, som tillĂ„ter att ange uttryck i konstruktörer före anropet till super(
), som anvĂ€nds för att uttryckligt anropa konstruktören av den överordnade klassen frĂ„n konstruktören av den Ă€rvda klassen, om dessa uttryck inte refererar till den instans som skapas av konstruktören. class Outer { void hello() { System.out.println("Hello"); } class Inner { Inner() { hello(); super(); } } }
  • I verktyget jlink har stöd för att skapa körningstider utan att anvĂ€nda JMOD-filer implementerats, vilket gör att storleken pĂ„ JDK kan minskas med cirka 25%.
  • En andra preliminĂ€r version av uttrycket "import module M" har lagts till för att importera alla paket som exporteras av den angivna modulen. FörĂ€ndringen förenklar vĂ€sentligt Ă„teranvĂ€ndningen av modulbibliotek genom att tillĂ„ta koppling av bibliotek och klasser utan att definiera deras plats i paketets hierarki. Till exempel kommer angivelsen "import module java.base" att importera alla 54 paket som ingĂ„r i modulen java.base, vilket tidigare skulle ha krĂ€vts att nĂ€mnas separat ("import java.io.*", "import java.util.*" osv.).
  • En fjĂ€rde preliminĂ€r implementation av implicit deklarerade klasser och anonyma instanser av metoden "main" har lagts till, dĂ€r man kan klara sig utan deklarationer av public/static, överföring av argumentarray och andra entiteter relaterade till klassdeklaration. // 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!"); }
  • Ett fjĂ€rde preliminĂ€rt alternativ av API för strukturerad parallellitet (Structured Concurrency) har föreslagits för testning, vilket förenklar utvecklingen av flertrĂ„dade applikationer genom att behandla flera uppgifter som körs i olika trĂ„dar som en enhetlig block.
  • I API:erna KeyPairGenerator, Signature och KeyFactory har stöd för algoritmerna ML-KEM (CRYSTALS-Kyber) och ML-DSA (CRYSTALS-Dilithium) lagts till, som har standardiserats av det nationella institutet för standarder och teknik i USA (NIST) och Ă€r kvantmotstĂ„ndiga. Dessa algoritmer anvĂ€nder kryptografiska metoder som baseras pĂ„ lösningen av problem inom gitterteori, vars lösningstid inte skiljer sig pĂ„ vanliga och kvantdatorer.
  • I samlaren ZGC har stödet för det icke-generativa lĂ€get tagits bort, vilket inte separerade bearbetningen av "gamla" och "unga" objekt. FrĂ„n och med Java SE 23 tillĂ€mpas det generativa lĂ€get i ZGC som standard.
  • Varningar har lagts till för anvĂ€ndningen av API:er som JNI (Java Native Interface) och FFM (Foreign Function & Memory) för att förbereda utvecklare för begrĂ€nsningar av tillgĂ„ngen till dessa API:er pĂ„ grund av införandet av en integritetssĂ€kring i kommande versioner som som standard förbjuder interaktion med inbyggd kod.
  • Varningar har aktiverats vid anvĂ€ndning av metoder för att komma Ă„t extern minne (utanför JVM) som tillhandahĂ„lls av klassen sun.misc.Unsafe. För att fĂ„ Ă„tkomst till minne utanför heapen och interagera med extern kod rekommenderas det att anvĂ€nda VarHandle API. I den senaste versionen förklarades stödet för sun.misc.Unsafe vara förĂ„ldrat.
  • Security Manager har stĂ€ngts av, vilket lĂ€nge har förlorat sin relevans och blivit oanvĂ€ndbart efter att stödet för webblĂ€sartillĂ€gget upphörde. Security Manager blev förĂ„ldrad i Java 17. I en av kommande versioner planeras att koden för Security Manager helt tas bort.
  • Koden för att stödja den 32-bitars plattformen av Windows pĂ„ x86-system har tagits bort. Java-porten för 32-bitars x86-system har förklarats förĂ„ldrad och planeras att tas bort (stöd för Linux pĂ„ 32-bitars x86-system kommer att upphöra).

Ytterligare kan nÀmnas publiceringen av plattformsuppdateringen för att skapa applikationer med JavaFX 24 och den nya versionen av den universella virtuella maskinen GraalVM, som stöder körning av applikationer i JavaScript (Node.js), Python, Ruby, R, alla sprÄk för JVM (Java, Scala, Clojure, Kotlin) och sprÄk för vilket bitkod LLVM kan genereras (C, C++, Rust). Utöver stödet för JDK 24 har nya versionen av GraalVM genomfört optimeringar för maskininlÀrningsrelaterade uppgifter, förbÀttrat stödet för kompilering av Java-bytecode till maskinkod, och lagt till mekanismen SkipFlow för att minska storleken pÄ körbara filer och minska kompileringstiden.

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