Udgivelsen af Java SE 17

Efter seks måneders udvikling har Oracle udgivet Java SE 17 (Java Platform, Standard Edition 17), hvor den referencemæssige implementering er det åbne projekt OpenJDK. Bortset fra fjernelsen af nogle forældede funktioner bevarer Java SE 17 bagudkompatibiliteten med tidligere versioner af Java-platformen — de fleste tidligere skrevne Java-projekter vil fungere uden ændringer, når de køres under den nye version. Klare installationspakker af Java SE 17 (JDK, JRE og Server JRE) er tilgængelige til Linux (x86_64, AArch64), Windows (x86_64) og macOS (x86_64, AArch64). Den referencemæssige implementering af Java 17, udviklet under OpenJDK-projektet, er helt åben under GPLv2-licensen med undtagelser fra GNU ClassPath, der tillader dynamisk linkning til kommercielle produkter.

Java SE 17 er kategoriseret som en version med langsigtet support (LTS), hvor opdateringer vil blive udgivet indtil 2029. Udgivelsen af opdateringer til den tidligere midlertidige version Java 16 er blevet stoppet. Den tidligere LTS-gren, Java 11, vil blive understøttet frem til 2026. Den næste LTS-udgave er planlagt til september 2024. Husk, at siden udgivelsen af Java 10 er projektet overgået til en ny udviklingsproces, der indebærer en kortere cyklus for formation af nye udgivelser. Ny funktionalitet udvikles nu i en konstant opdateret master-gren, som inkluderer færdige ændringer og fra hvilken der hver sjette måned forgrenes til stabiliseringsgrene for nye udgivelser.

Blandt nyhederne i Java 17 kan nævnes:

  • Der er forslag til en eksperimentel implementering af mønstermatching i 'switch' udtryk, som tillader brug af fleksible mønstre i 'case' etiketter, der dækker en række værdier, som tidligere krævede store kæder af 'if...else' udtryk. Derudover er der indført muligheder for håndtering af NULL-værdier inden for 'switch'. 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(); };
  • Stabiliseret støtte til indkapslede (‘sealed’) klasser og grænseflader, som ikke kan bruges af andre klasser og grænseflader til arv, udvidelse eller omskrivning af implementeringen. Indkapslede klasser tilbyder også en mere deklarativ måde at begrænse brugen af superklassen på end adgangsmodifikatorer, som er baseret på en eksplicit opregning af underklasser, der er tilladt til udvidelse. package com.example.geometry; public sealed class Shape permits com.example.polar.Circle, com.example.quad.Rectangle, com.example.quad.simple.Square {…}
  • En anden foreløbig implementering af API Vector er blevet foreslået, som giver funktioner til vektorberegninger, der udføres med vektoriserede processorinstruktioner for x86_64 og AArch64 og muliggør samtidig anvendelse af operationer på flere værdier (SIMD). I modsætning til de funktioner, der tilbydes af JIT-kompilatoren HotSpot til automatisk vektorisering af skalaroperationer, giver det nye API mulighed for eksplicit at styre vektoriseringen til parallel databehandling.
  • En foreløbig implementering af API Foreign Function & Memory er blevet tilføjet, som gør det muligt for applikationer at interagere med kode og data, der befinder sig uden for Java runtime. Det nye API muliggør effektivt at kalde funktioner, der ikke kører i JVM, og få adgang til hukommelse, der ikke håndteres af JVM. For eksempel kan man kalde funktioner fra eksterne delte biblioteker og få adgang til procesdata uden at bruge JNI.
  • Rendering-motoren til macOS, der understøtter Java 2D API, som igen er involveret i API Swing, er tilpasset til brug af grafisk API Metal. Som standard anvendes OpenGL stadig på macOS-platformen, men for at aktivere Metal-support skal parameteren ‘-Dsun.java2d.metal=true’ sættes, og det kræver mindst macOS-version 10.14.x.
  • En port til platformen macOS/AArch64 (Apple-computere baseret på de nye Apple M1-chips) er blevet tilføjet. En speciel funktion ved porten er understøttelsen af hukommelsesbeskyttelsesmekanismen W^X (Write XOR Execute), hvor hukommelsessider ikke kan være tilgængelige både for skrivning og udførelse på samme tid. (Koden kan kun udføres efter skrivning er forbudt, og skrivning til en hukommelsesside er kun muligt efter udførelse er forbudt).
  • Brug af kun streng (strictfp) semantik til flydende punkt-udtryks er blevet genindført. Understøttelsen af den tilgængelige semantik 'default', der inkluderede forenklinger til brug på systemer med meget gamle x87 matematiske co-processorer, er ophørt (med fremkomsten af SSE2-instrukserne er behovet for den ekstra semantik forsvundet).
  • Nye typer grænseflader til generatorer af pseudotilfældige tal er blevet implementeret, og der er implementeret yderligere algoritmer til bedre generering af tilfældige tal. Applikationer får mulighed for at vælge algoritmen for generering af pseudotilfældige tal. Understøttelsen af generering af strømme af tilfældige objekter er forbedret.
  • Obligatorisk streng indkapsling af alle interne elementer i JDK er blevet implementeret, undtagen for kritiske API'er som sun.misc.Unsafe. Streng indkapsling blokerer forsøg på at tilgå interne klasser, metoder og felter fra koden. Tidligere kunne den strenge indkapslingsmode deaktiveres med indstillingen ‘—illegal-access=permit’, men den er nu blevet forældet. For applikationer, der har brug for adgang til interne klasser, metoder og felter, skal de eksplicit definere dem med indstillingen ‘—add-opens’ eller attributten Add-Opens i manifestfilen.
  • Applikationer får mulighed for at definere filtre til deserialisering af data, der kan afhænge af konteksten og vælges dynamisk i forhold til bestemte deserialiseringsoperationer. De angivne filtre er gældende på tværs af hele virtuelle maskiner (JVM-wide), dvs. de dækker ikke kun applikationen selv, men også de tredjepartsbiblioteker, der anvendes i applikationen.
  • I Swing er metoden javax.swing.filechooser.FileSystemView.getSystemIcon blevet tilføjet for at indlæse ikoner i stor størrelse, hvilket muliggør en forbedring af brugergrænsefladeopbygningen på skærme med høj pixel tæthed (HighDPI).
  • I API'et java.net.DatagramSocket er der blevet implementeret understøttelse af forbindelse til multicast-grupper uden behov for at bruge det separate API java.net.MulticastSocket.
  • Den ideelle graf visualiseringsværktøj (IGV) er blevet forbedret, hvilket sikrer interaktiv visualisering af den mellemliggende repræsentation af kode i JIT-kompilatoren HotSpot VM C2.
  • I JavaDoc er linjenummeret for den problematiske linje i kildefilen og fejlstedet nu angivet ved fejludskrift, svarende til javac-kompilatoren.
  • Egenskaben native.encoding er tilføjet, som afspejler navnet på det systemkode, der bruges (UTF-8, koi8-r, cp1251 osv.).
  • Interface java.time.InstantSource er tilføjet, som muliggør manipulation af tid uden bånd til tidszone.
  • API java.util.HexFormat er tilføjet til konvertering til hexadecimal repræsentation og tilbage igen.
  • Komponenten indeholder en blackhole-tilstand, der deaktiverer undtagelsesoperationer for uanvendt kode (dead-code elimination), hvilket kan anvendes under præstationstest.
  • I Runtime er der tilføjet en indstilling: «-Xlog:async» til at optage logs i asynkron tilstand.
  • Ved oprettelse af sikre forbindelser er TLS 1.3 som standard aktiveret (tidligere blev TLS 1.2 brugt).
  • Den tidligere erklærede forældede API Applet (java.applet.Applet*, javax.swing.JApplet), som blev brugt til at køre Java-applikationer i browsere, er flyttet til kategorien for planlagt fjernelse (mistede relevans efter stop for support til Java-plugin til browsere).
  • Security Manager, som længe har været overflødig og ikke eftertragtet efter stoppet for support til browser-plugin, er også blevet flyttet til kategorien for planlagt fjernelse.
  • RMI Activation-mekanismen, som er forældet, blev flyttet til kategori med valgfri funktionalitet allerede i Java 8 og anvendes næsten ikke i moderne praksis.
  • Den eksperimentelle kompilator i SDK, der understøttede JIT (just-in-time) til dynamisk kompilering af Java-kode til HotSpot JVM, samt AOT (ahead-of-time) til prækompilering af klasser til maskinkode før start af den virtuelle maskine, er blevet fjernet. Kompilatoren blev skrevet i Java og er baseret på arbejderne fra Graal-projektet. Det bemærkes, at vedligeholdelsen af kompilatoren kræver store arbejdsressourcer, som ikke retfærdiggøres i lyset af den manglende efterspørgsel fra udviklere.

Kilde: opennet.ru

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster