Java SE 17 utgivelse

Etter seks måneder med utvikling, ga Oracle ut Java SE 17 (Java Platform, Standard Edition 17), som bruker OpenJDK åpen kildekode-prosjektet som referanseimplementering. Med unntak av fjerning av noen foreldede funksjoner, opprettholder Java SE 17 bakoverkompatibilitet med tidligere utgivelser av Java-plattformen - de fleste tidligere skrevne Java-prosjekter vil fungere uten endringer når de kjøres under den nye versjonen. Klar til å installere bygg av Java SE 17 (JDK, JRE og Server JRE) er forberedt for Linux (x86_64, AArch64), Windows (x86_64) og macOS (x86_64, AArch64). Java 17-referanseimplementeringen er utviklet av OpenJDK-prosjektet og er fullstendig åpen kildekode under GPLv2-lisensen, med GNU ClassPath-unntak som tillater dynamisk kobling med kommersielle produkter.

Java SE 17 er klassifisert som en Long Term Support (LTS)-utgivelse, som vil fortsette å motta oppdateringer frem til 2029. Oppdateringer for den forrige milepælsutgivelsen av Java 16 er avviklet. Den forrige LTS-grenen av Java 11 vil bli støttet frem til 2026. Den neste LTS-utgivelsen er planlagt til september 2024. La oss minne deg på at fra og med utgivelsen av Java 10, gikk prosjektet over til en ny utviklingsprosess, noe som innebar en kortere syklus for dannelsen av nye utgivelser. Ny funksjonalitet utvikles nå i én konstant oppdatert hovedgren, som inkluderer ferdige endringer og hvor grener forgrenes hvert halvår for å stabilisere nye utgivelser.

Nye funksjoner i Java 17 inkluderer:

  • En eksperimentell implementering av mønstertilpasning i "switch"-uttrykk er foreslått, som tillater bruk av ikke eksakte verdier i "case"-etiketter, men fleksible maler som dekker en serie verdier på en gang, som det tidligere var nødvendig å bruke tungvint for. kjeder av "hvis ... annet" uttrykk. I tillegg har "switch" muligheten til å håndtere NULL-verdier. Objekt o = 123L; String formatted = switch (o) { case Heltall i -> String.format("int %d", i); kasus Lang l -> String.format("lang %d", l); kasus Dobbel d -> String.format("dobbel %f", d); case String s -> String.format("String %s", s); default -> o.toString(); };
  • Stabilisert støtte for forseglede klasser og grensesnitt, som ikke kan brukes av andre klasser og grensesnitt for å arve, utvide eller overstyre implementeringen. Forseglede klasser gir også en mer deklarativ måte å begrense bruken av en superklasse enn tilgangsmodifikatorer, basert på en eksplisitt liste over underklassene som er tillatt for utvidelse. pakke com.example.geometry; offentlig forseglet klasse Form tillater com.example.polar.Circle, com.example.quad.Rectangle, com.example.quad.simple.Square {...}
  • En andre forhåndsvisning av Vector API er foreslått, som gir funksjoner for vektorberegninger som utføres ved hjelp av vektorinstruksjoner på x86_64- og AArch64-prosessorer og lar operasjoner brukes samtidig på flere verdier (SIMD). I motsetning til mulighetene gitt i HotSpot JIT-kompilatoren for autovektorisering av skalaroperasjoner, gjør det nye API-et det mulig å eksplisitt kontrollere vektorisering for parallell databehandling.
  • Lagt til en forhåndsvisning av Foreign Function & Memory API, som lar applikasjoner samhandle med kode og data utenfor Java-kjøringen. Den nye API-en lar deg effektivt kalle ikke-JVM-funksjoner og få tilgang til ikke-JVM-administrert minne. For eksempel kan du kalle opp funksjoner fra eksterne delte biblioteker og få tilgang til prosessdata uten å bruke JNI.
  • MacOS-gjengivelsesmotoren som driver Java 2D API, som igjen driver Swing API, er tilpasset for å bruke Metal graphics API. MacOS-plattformen fortsetter å bruke OpenGL som standard, og aktivering av Metal-støtte krever innstilling "-Dsun.java2d.metal=true" og minst kjører macOS 10.14.x.
  • Lagt til en port for macOS/AArch64-plattformen (Apple-datamaskiner basert på de nye Apple M1-brikkene). En spesiell funksjon ved porten er støtte for W^X (Write XOR Execute) minnebeskyttelsesmekanisme, der minnesider ikke kan nås samtidig for skriving og kjøring. (koden kan kun utføres etter at skriving er deaktivert, og skriving til en minneside er bare mulig etter at kjøringen er deaktivert).
  • Går tilbake til å bruke bare strictfp-semantikk for flytende kommauttrykk. Støtte for "standard" semantikk, tilgjengelig siden utgivelsen av Java 1.2, har blitt avviklet, inkludert forenklinger for arbeid med systemer med svært gamle x87 matematiske koprosessorer (etter bruken av SSE2-instruksjoner, forsvant behovet for ytterligere semantikk).
  • Nye typer grensesnitt til pseudotilfeldige tallgeneratorer er implementert, og ytterligere algoritmer er implementert for bedre generering av tilfeldige tall. Applikasjoner gis muligheten til å velge en algoritme for å generere pseudorandomtall. Forbedret støtte for å generere tilfeldige objektstrømmer.
  • Tvinget streng innkapsling av alle JDK-innbygg, med unntak av kritiske APIer som sun.misc.Unsafe. Strengt innkapsling blokkerer forsøk fra kode for å få tilgang til interne klasser, metoder og felt. Tidligere kunne streng innkapslingsmodus deaktiveres ved å bruke alternativet "--illegal-access=permit", men dette har nå blitt avviklet. Applikasjoner som krever tilgang til interne klasser, metoder og felt bør eksplisitt definere dem ved å bruke --add-opens-alternativet eller Add-Opens-attributtet i manifestfilen.
  • Applikasjoner gis muligheten til å definere datadeserialiseringsfiltre, som kan være kontekstsensitive og dynamisk valgt basert på spesifikke deserialiseringsoperasjoner. De angitte filtrene gjelder for hele den virtuelle maskinen (JVM-wide), dvs. dekker ikke bare selve applikasjonen, men også tredjepartsbibliotekene som brukes i applikasjonen.
  • Swing har lagt til javax.swing.filechooser.FileSystemView.getSystemIcon-metoden for å laste inn store ikoner for å forbedre brukergrensesnittet på skjermer med høy DPI.
  • Java.net.DatagramSocket API gir støtte for å koble til Multicast-grupper uten behov for en separat java.net.MulticastSocket API.
  • IGV (Ideal Graph Visualizer)-verktøyet har blitt forbedret, og gir interaktiv visualisering av mellomkoderepresentasjon i HotSpot VM C2 JIT-kompilatoren.
  • I JavaDoc, analogt med javac-kompilatoren, når en feil sendes ut, er nummeret på den problematiske linjen i kildefilen og plasseringen av feilen angitt.
  • Lagt til egenskapen native.encoding, som gjenspeiler navnet på systemkarakterkodingen (UTF-8, koi8-r, cp1251, etc.).
  • Grensesnittet java.time.InstantSource er lagt til, og tillater tidsmanipulasjon uten referanse til en tidssone.
  • Lagt til java.util.HexFormat API for konvertering til heksadesimal representasjon og vice versa.
  • En blackhole-modus er lagt til kompilatoren, som deaktiverer dødkode-elimineringsoperasjoner, som kan brukes når du utfører ytelsestester.
  • Lagt til "-Xlog:async"-alternativet til Runtime for å registrere logger i asynkron modus.
  • Når du oppretter sikre tilkoblinger, er TLS 1.3 aktivert som standard (tidligere ble TLS 1.2 brukt).
  • Den tidligere erklærte foreldede Applet API (java.applet.Applet*, javax.swing.JApplet), som ble brukt til å kjøre Java-applikasjoner i nettleseren, har blitt flyttet til kategorien planlagt for fjerning (mistet relevans etter avsluttet støtte for Java-plugin for nettlesere).
  • Security Manager, som for lengst har mistet sin relevans og viste seg å være uavhentet etter avsluttet støtte for nettleserplugin, er flyttet til kategorien de som er planlagt for fjerning.
  • RMI-aktiveringsmekanismen er fjernet, som er utdatert, henvist til kategorien et alternativ i Java 8 og nesten aldri brukes i moderne praksis.
  • En eksperimentell kompilator som støtter JIT (just-in-time) for dynamisk kompilering av Java-kode for HotSpot JVM, samt modusen for foregripende kompilering (AOT, på forhånd) av klasser til maskinkode før du starter den virtuelle maskin, er fjernet fra SDK. Kompilatoren ble skrevet i Java og basert på arbeidet til Graal-prosjektet. Det bemerkes at kompilatorvedlikehold krever mye arbeidskraft, noe som ikke er berettiget når det ikke er etterspørsel fra utviklere.

Kilde: opennet.ru

Legg til en kommentar