Izdaja Java SE 17

Po šestih mesecih razvoja je Oracle izdal platformo Java SE 17 (Java Platform, Standard Edition 17), ki kot referenčno izvedbo uporablja odprtokodni projekt OpenJDK. Z izjemo odstranitve nekaterih zastarelih funkcij Java SE 17 ohranja povratno združljivost s prejšnjimi izdajami platforme Java – večina predhodno napisanih projektov Java bo še vedno delovala brez sprememb, ko se izvajajo v novi različici. Za namestitev pripravljene različice Java SE 17 (JDK, JRE in Server JRE) so pripravljene za Linux (x86_64, AArch64), Windows (x86_64) in macOS (x86_64, AArch64). Referenčna izvedba Java 17, ki jo je razvil projekt OpenJDK, je popolnoma odprtokodna pod licenco GPLv2 z izjemami GNU ClassPath, ki omogočajo dinamično povezovanje s komercialnimi izdelki.

Java SE 17 je razvrščena kot izdaja dolgoročne podpore (LTS), ki bo prejemala posodobitve do leta 2029. Posodobitve za prejšnjo izdajo mejnika Jave 16 so bile ukinjene. Prejšnja veja LTS Jave 11 bo podprta do leta 2026. Naslednja izdaja LTS je predvidena za september 2024. Naj vas spomnimo, da je projekt z izdajo Jave 10 prešel na nov razvojni proces, kar pomeni krajši cikel za oblikovanje novih izdaj. Nova funkcionalnost je zdaj razvita v eni stalno posodobljeni glavni veji, ki vključuje že pripravljene spremembe in iz katere se veje razvejajo vsakih šest mesecev za stabilizacijo novih izdaj.

Nove funkcije v Javi 17 vključujejo:

  • Predlagana je eksperimentalna izvedba ujemanja vzorcev v izrazih »switch«, ki omogoča uporabo ne natančnih vrednosti v oznakah »case«, temveč prilagodljive predloge, ki pokrivajo niz vrednosti hkrati, za kar je bilo prej potrebno uporabljati okorne verige izrazov »če ... drugače«. Poleg tega lahko "switch" obravnava vrednosti NULL. Objekt o = 123L; String formatted = switch (o) { case Integer i -> String.format("int %d", i); case Long l -> String.format("dolg %d", l); case Double d -> String.format("double %f", d); case String s -> String.format("Niz %s", s); privzeto -> o.toString(); };
  • Stabilizirana podpora za zapečatene razrede in vmesnike, ki jih drugi razredi in vmesniki ne morejo uporabiti za podedovanje, razširitev ali preglasitev izvedbe. Zapečateni razredi zagotavljajo tudi bolj deklarativen način za omejevanje uporabe nadrazreda kot modifikatorji dostopa, ki temelji na eksplicitnem seznamu podrazredov, dovoljenih za razširitev. paket com.example.geometry; javni zapečateni razred Oblika dovoljuje com.example.polar.Circle, com.example.quad.Rectangle, com.example.quad.simple.Square {…}
  • Predlaga se drugi predogled vektorskega API-ja, ki zagotavlja funkcije za vektorske izračune, ki se izvajajo z uporabo vektorskih navodil na procesorjih x86_64 in AArch64 in omogočajo hkratno uporabo operacij za več vrednosti (SIMD). Za razliko od zmožnosti prevajalnika HotSpot JIT za samodejno vektorizacijo skalarnih operacij novi API omogoča izrecno nadzorovanje vektorizacije za vzporedno obdelavo podatkov.
  • Dodan predogled API-ja Foreign Function & Memory, ki aplikacijam omogoča interakcijo s kodo in podatki zunaj izvajalnega okolja Java. Novi API vam omogoča učinkovito klicanje funkcij, ki niso JVM, in dostop do pomnilnika, ki ga ne upravlja JVM. Na primer, lahko pokličete funkcije iz zunanjih knjižnic v skupni rabi in dostopate do podatkov procesa brez uporabe JNI.
  • Mehanizem upodabljanja macOS, ki poganja Java 2D API, ta pa Swing API, je bil prilagojen za uporabo Metal graphics API. Platforma macOS privzeto še naprej uporablja OpenGL, za omogočanje podpore za Metal pa je potrebna nastavitev »-Dsun.java2d.metal=true« in zagon vsaj macOS 10.14.x.
  • Dodana vrata za platformo macOS/AArch64 (računalniki Apple, ki temeljijo na novih čipih Apple M1). Posebnost vrat je podpora mehanizmu za zaščito pomnilnika W^X (Write XOR Execute), pri katerem ni mogoče istočasno dostopati do pomnilniških strani za pisanje in izvajanje. (koda se lahko izvaja šele, ko je pisanje onemogočeno, pisanje na pomnilniško stran pa je možno šele, ko je izvajanje onemogočeno).
  • Vrnitev na uporabo samo semantike strictfp za izraze s plavajočo vejico. Podpora za »privzeto« semantiko, ki je na voljo od izdaje Jave 1.2, je bila ukinjena, vključno s poenostavitvami za delo na sistemih z zelo starimi matematičnimi koprocesorji x87 (po pojavu navodil SSE2 je potreba po dodatni semantiki izginila).
  • Implementirani so bili novi tipi vmesnikov za generatorje psevdonaključnih števil in implementirani dodatni algoritmi za boljše generiranje naključnih števil. Aplikacijam je dana možnost izbire algoritma za generiranje psevdonaključnih števil. Izboljšana podpora za generiranje naključnih tokov predmetov.
  • Uveljavljena stroga enkapsulacija vseh notranjih elementov JDK, z izjemo kritičnih API-jev, kot je sun.misc.Unsafe. Stroga enkapsulacija blokira poskuse kode za dostop do notranjih razredov, metod in polj. Prej je bilo mogoče način stroge enkapsulacije onemogočiti z možnostjo "--illegal-access=permit", vendar je to zdaj opuščeno. Aplikacije, ki zahtevajo dostop do notranjih razredov, metod in polj, jih morajo izrecno definirati z možnostjo --add-opens ali atributom Add-Opens v datoteki manifesta.
  • Aplikacijam je dana možnost definiranja filtrov za deserializacijo podatkov, ki so lahko kontekstno občutljivi in ​​dinamično izbrani na podlagi posebnih operacij deserializacije. Navedeni filtri veljajo za celoten virtualni stroj (širok JVM), tj. ne zajemajo le aplikacije same, temveč tudi knjižnice tretjih oseb, ki se uporabljajo v aplikaciji.
  • Swing je dodal metodo javax.swing.filechooser.FileSystemView.getSystemIcon za nalaganje velikih ikon za izboljšanje uporabniškega vmesnika na zaslonih z visoko DPI.
  • API java.net.DatagramSocket nudi podporo za povezovanje s skupinami Multicast brez potrebe po ločenem API-ju java.net.MulticastSocket.
  • Pripomoček IGV (Ideal Graph Visualizer) je bil izboljšan in zagotavlja interaktivno vizualizacijo vmesne predstavitve kode v prevajalniku HotSpot VM C2 JIT.
  • V JavaDocu, po analogiji s prevajalnikom javac, sta ob prikazu napake zdaj navedena številka problematične vrstice v izvorni datoteki in mesto napake.
  • Dodana lastnost native.encoding, ki odraža ime sistemskega kodiranja znakov (UTF-8, koi8-r, cp1251 itd.).
  • Dodan je bil vmesnik java.time.InstantSource, ki omogoča časovno manipulacijo brez sklicevanja na časovni pas.
  • Dodan java.util.HexFormat API za pretvorbo v šestnajstiško predstavitev in obratno.
  • Prevajalniku je bil dodan način črne luknje, ki onemogoča operacije odstranjevanja mrtve kode, kar je mogoče uporabiti pri izvajanju testov zmogljivosti.
  • Dodana možnost »-Xlog:async« v Runtime za snemanje dnevnikov v asinhronem načinu.
  • Pri vzpostavljanju varnih povezav je privzeto omogočen TLS 1.3 (prej je bil uporabljen TLS 1.2).
  • Prej razglašen za zastarel Applet API (java.applet.Applet*, javax.swing.JApplet), ki se je uporabljal za izvajanje aplikacij Java v brskalniku, je bil premaknjen v kategorijo predvidenih za odstranitev (izgubil pomen po koncu podpore za vtičnik Java za brskalnike).
  • Varnostni upravitelj, ki je že zdavnaj izgubil pomen in se je po koncu podpore za vtičnik brskalnika izkazal za neprijavljenega, je bil premaknjen v kategorijo tistih, ki so načrtovani za odstranitev.
  • Odstranjen je bil RMI Activation mehanizem, ki je zastarel, potisnjen v kategorijo možnosti v Javi 8 in se skoraj nikoli ne uporablja v sodobni praksi.
  • Eksperimentalni prevajalnik, ki podpira JIT (just-in-time) za dinamično prevajanje kode Java za HotSpot JVM, kot tudi način predvidenega prevajanja (AOT, vnaprej) razredov v strojno kodo pred zagonom virtualnega stroja , je bil odstranjen iz SDK-ja. Prevajalnik je bil napisan v Javi in ​​temelji na delu projekta Graal. Opozoriti je treba, da vzdrževanje prevajalnika zahteva veliko dela, kar ni upravičeno, če ni povpraševanja razvijalcev.

Vir: opennet.ru

Dodaj komentar