Lansering av Java SE 17

Efter sex mĂ„nader av utveckling har Oracle slĂ€ppt plattformen Java SE 17 (Java Platform, Standard Edition 17), dĂ€r den referensimplementation som anvĂ€nds bygger pĂ„ det öppna projektet OpenJDK. Bortsett frĂ„n att vissa förĂ„ldrade funktioner har tagits bort, har Java SE 17 bibehĂ„llen bakĂ„tkompatibilitet med tidigare versioner av Java-plattformen – de flesta tidigare skrivna Java-projekt kommer att fungera utan Ă€ndringar nĂ€r de körs pĂ„ den nya versionen. InstallationsfĂ€rdiga versioner av Java SE 17 (JDK, JRE och Server JRE) har förberetts för Linux (x86_64, AArch64), Windows (x86_64) och macOS (x86_64, AArch64). Den referensimplementation av Java 17 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 17 klassas som en version med lÄngsiktig support (LTS), dÀr uppdateringar kommer att slÀppas fram till 2029. Utgivningen av uppdateringar för den föregÄende versionen Java 16 har upphört. Den tidigare LTS-grenen Java 11 kommer att stödjas fram till 2026. Den nÀsta LTS-versionen planeras till september 2024. Vi pÄminner om att projektet frÄn och med Java 10 har övergÄtt till en ny utvecklingsprocess som innebÀr en kortare cykel för nya versioner. Den nya funktionaliteten utvecklas nu i en stÀndigt uppdaterad mastergren, dÀr fÀrdiga Àndringar inkluderas, och var sjÀtte mÄnad avgrenas grenar för stabilisering av de nya versionerna.

Bland nyheterna i Java 17 kan nÀmnas:

  • En experimentell implementering av mönstermatchning i "switch"-uttryck har föreslagits, vilket möjliggör anvĂ€ndning av flexibla mönster i "case"-etiketterna som tĂ€cker en serie vĂ€rden, vilka tidigare krĂ€vde anvĂ€ndning av omfattande kedjor av "if
else"-uttryck. Dessutom har möjligheten att hantera NULL-vĂ€rden inuti "switch" sĂ€kerstĂ€llts. Object o = 123L; String formatted = switch (o) { case Integer i -> String.format("int %d", i); case Long l -> String.format("long %d", l); case Double d -> String.format("double %f", d); case String s -> String.format("String %s", s); default -> o.toString(); };
  • Stödet för inkapslade ("sealed") klasser och grĂ€nssnitt har stabiliserats, vilka inte kan anvĂ€ndas av andra klasser och grĂ€nssnitt för arv, utvidgning eller överskrivning av implementation. Inkapslade klasser ger ocksĂ„ ett mer deklarativt sĂ€tt att begrĂ€nsa anvĂ€ndningen av superklassen Ă€n Ă„tkomstmodifierare, baserat pĂ„ en explicit upprĂ€kning av underklasser som Ă€r tillĂ„tna för utvidgning. package com.example.geometry; public sealed class Shape permits com.example.polar.Circle, com.example.quad.Rectangle, com.example.quad.simple.Square {
}
  • En andra preliminĂ€r implementering av API:et för Vektorer har föreslagits, vilket tillhandahĂ„ller funktioner för vektorberĂ€kningar som utförs med hjĂ€lp av vektorinstruktioner frĂ„n x86_64- och AArch64-processorer och möjliggör att operationer tillĂ€mpas samtidigt pĂ„ flera vĂ€rden (SIMD). Till skillnad frĂ„n omfattningen av av-vĂ€rde-vĂ€rdesvigning av skalaroperationer som erbjuds i JIT-kompilatorn HotSpot, ger det nya API:et möjlighet att explicit styra vektoriseringen för parallell databehandling.
  • En preliminĂ€r implementering av API:et för UtlĂ€ndsk Funktion & Minne har lagts till, som gör det möjligt för applikationer att interagera med kod och data utanför Java-runtime. Det nya API:et tillĂ„ter effektiv anrop av funktioner som inte körs i JVM och att fĂ„ Ă„tkomst till minne som inte hanteras av JVM. Till exempel kan funktioner frĂ„n externa delade bibliotek anropas och data i processen nĂ„s utan att anvĂ€nda JNI.
  • Ritmotor för macOS, som stöder Java 2D API, som i sin tur anvĂ€nds i Swing API, har anpassats för att anvĂ€nda grafik-API:et Metal. Som standard anvĂ€nds fortfarande OpenGL pĂ„ macOS-plattformen, och för att aktivera stöd för Metal krĂ€vs det att parametern "-Dsun.java2d.metal=true" stĂ€lls in och att minst macOS-version 10.14.x Ă€r installerad.
  • En port för macOS/AArch64-plattformen (Apple-datorer med de nya Apple M1-chippen) har lagts till. En sĂ€rskild funktion hos porten Ă€r stöd för minnesskyddsmekanismen W^X (Write XOR Execute), dĂ€r minnessidor inte kan vara samtidigt tillgĂ€ngliga för skrivning och exekvering. (kod kan endast exekveras efter att skrivning har förhindrats, och skrivning till en minnessida Ă€r endast möjlig efter att exekvering har förhindrats).
  • Endast strikt (strictfp) semantik för flyttalsuttryck har Ă„terinförts. Stödet för tillgĂ€ngligheten har upphört frĂ„n och med Java 1.2-versionen av semantiken "default", som inkluderade förenklingar för att fungera pĂ„ mycket gamla matematiska co-processorer som x87 (efter introduktionen av SSE2-instruktioner har behovet av ytterligare semantik försvunnit).
  • Nya typer av grĂ€nssnitt till pseudotillfĂ€lliga nummergeneratorer har införlivats, liksom ytterligare algoritmer för bĂ€ttre kvalitet pĂ„ de genererade slumptalen. Applikationerna har möjlighet att vĂ€lja algoritm för pseudotillfĂ€lliga nummergeneratorer. Stödet för att generera strömmar av slumpmĂ€ssiga objekt har förbĂ€ttrats.
  • Obligatorisk strikt inkapsling av alla interna element i JDK har införts, med undantag för kritiska API:er, som sun.misc.Unsafe. Strikt inkapsling blockerar försök att fĂ„ Ă„tkomst till interna klasser, metoder och fĂ€lt frĂ„n koden. Tidigare kunde strikt inkapsling inaktiveras med alternativet "—illegal-access=permit", men det har nu blivit förĂ„ldrat. För applikationer som behöver Ă„tkomst till interna klasser, metoder och fĂ€lt bör dessa explicit definieras med alternativet "—add-opens" eller med attributet Add-Opens i manifestfilen.
  • Applikationerna har möjlighet att definiera filter för deserialisering av data, vilket kan bero pĂ„ kontext och vĂ€ljas dynamiskt i samband med specifika deserialiseringsoperationer. Definierade filter tillĂ€mpas pĂ„ hela en virtuell maskin (JVM-omfattande), det vill sĂ€ga omfattar inte bara sjĂ€lva applikationen utan Ă€ven de tredjepartsbibliotek som anvĂ€nds i applikationen.
  • I Swing har metoden javax.swing.filechooser.FileSystemView.getSystemIcon lagts till för att ladda stora ikoner, vilket förbĂ€ttrar grĂ€nssnittsbildningen pĂ„ skĂ€rmar med hög pixeldensitet (HighDPI).
  • I api:t java.net.DatagramSocket har stöd för att ansluta till Multicast-grupper införts utan att behöva anvĂ€nda det separata api:t java.net.MulticastSocket.
  • Verktyget IGV (Ideal Graph Visualizer) har förbĂ€ttrats för att sĂ€kerstĂ€lla interaktiv visualisering av den mellanliggande koden i JIT-kompilatorn HotSpot VM C2.
  • I JavaDoc, pĂ„ samma sĂ€tt som kompilatorn javac, anges radnumret för problemlinjen i kĂ€llfilen och platsen för felet nĂ€r ett felrapporteras.
  • Egenskapen native.encoding har lagts till, vilket Ă„terspeglar namnet pĂ„ den systemkodning av tecken som anvĂ€nds (UTF-8, koi8-r, cp1251 osv.).
  • GrĂ€nssnittet java.time.InstantSource har lagts till, vilket möjliggör manipulering av tid utan koppling till tidszon.
  • API:t java.util.HexFormat har lagts till för att konvertera till hexadecimalt format och vice versa.
  • Kompilatorn har fĂ„tt en blackhole-lĂ€ge som inaktiverar undantagsoperationer för oanvĂ€nd kod (dead-code elimination), vilket kan anvĂ€ndas vid prestandatestning.
  • I Runtime har alternativet "-Xlog:async" lagts till för att skriva loggar i asynkront lĂ€ge.
  • Vid installation av sĂ€krade anslutningar anvĂ€nds TLS 1.3 som standard (tidigare anvĂ€ndes TLS 1.2).
  • Applet-API:n (java.applet.Applet*, javax.swing.JApplet) som tidigare annonserats som förĂ„ldrad har flyttats till kategorin för planerad avveckling och anvĂ€ndes för att köra Java-applikationer i webblĂ€saren (har blivit irrelevant efter att Java-plugin-stödet för webblĂ€sare upphörde).
  • Security Manager har flyttats till kategorin för planerad avveckling, som lĂ€nge har blivit irrelevant och inte efterfrĂ„gad efter att stödet för webblĂ€sarpluginet har upphört.
  • RMI Activation-mekanismen har tagits bort, vilket var förĂ„ldrat, flyttades till graden av val i Java 8 och anvĂ€nds nĂ€stan inte i modern praxis.
  • Den experimentella kompilatorn som stödde JIT (just-in-time) för dynamisk kompilering av Java-kod för HotSpot JVM har tagits bort frĂ„n SDK, liksom AOT-lĂ€get (ahead-of-time) för kompilation av klasser till maskinkod före körning av den virtuella maskinen. Kompilatorn skrevs i Java och baserades pĂ„ arbete frĂ„n Graal-projektet. Det pĂ„pekas att underhĂ„llet av kompilatorn krĂ€ver stor arbetsinsats utan att vara rĂ€ttfĂ€rdigat av utvecklarnas efterfrĂ„gan.

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