Izdaja Java SE 17

Po šestih mesecih razvoja je podjetje Oracle izdala platformo Java SE 17 (Java Platform, Standard Edition 17), katere referenčna izvedba se uporablja v odprtem projektu OpenJDK. Razen odstranitev nekaterih zastarelih funkcionalnosti je v Java SE 17 ohranjena obratna združljivost s prejšnjimi različicami platforme Java — večina prej napisanih Java projektov bo brez sprememb delovala na novi različici. Na voljo so namestitve Java SE 17 (JDK, JRE in Server JRE) za Linux (x86_64, AArch64), Windows (x86_64) in macOS (x86_64, AArch64). Referenčna različica Java 17, razvita v okviru projekta OpenJDK, je popolnoma odprta pod licenco GPLv2 z izvzetji GNU ClassPath, ki omogočajo dinamično povezovanje s komercialnimi izdelki.

Java SE 17 spada v kategorijo različic z dolgoročnim podporom (LTS), posodobitve zanj bodo izhajale do leta 2029. Izdaja posodobitev prejšnje vmesne različice Java 16 je prenehala. Prejšnja LTS različica Java 11 bo podpirana do leta 2026. Naslednja LTS izdaja je predvidena za september 2024. Spomnimo, da je projekt po izdaji Java 10 prešel na nov razvojni proces, ki vključuje krajši cikel oblikovanja novih izdaj. Nova funkcionalnost se zdaj razvija v eni neprekinjeno posodobljeni master veji, kjer so vključene že pripravljene spremembe, od katere se vsakih šest mesecev odcepijo veje za stabilizacijo novih izdaj.

Med novostmi Java 17 lahko izpostavimo:

  • Predlagana je eksperimentalna izvedba ujemanja po predlogah v izrazu „switch“, ki omogoča uporabo fleksibilnih vzorcev v oznakah „case“, ki zajemajo hkrati serijo vrednosti, za katere bi prej morali uporabljati obsežne verige izrazov „if…else“. Poleg tega je v okviru „switch“ omogočena tudi obdelava vrednosti NULL. 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(); };
  • Stabilizirana je podpora za zapegnjene („sealed“) razrede in vmesnike, ki jih ne morejo uporabljati drugi razredi in vmesniki za dedovanje, širitev ali prepisovanje implementacije. Zapegnjeni razredi tudi ponujajo bolj deklarativen način omejevanja uporabe nadrazreda kot modifikatorji dostopa, ki temelji na izrecnem naštevanju podrazredov, dovoljenih za širitev. package com.example.geometry; public sealed class Shape permits com.example.polar.Circle, com.example.quad.Rectangle, com.example.quad.simple.Square {...}
  • Predlagana je druga predhodna implementacija API-ja Vector, ki nudi funkcije za vektorske izračune, ki se izvajajo s pomočjo vektorskih ukazov procesorjev x86_64 in AArch64 ter omogoča istočasno uporabo operacij na več vrednostih (SIMD). V nasprotju s funkcijami avto-vektoriranja skalarnih operacij, ki jih ponuja JIT-kompilator HotSpot, nov API omogoča izrecno upravljanje z vektorizacijo za paralelno obdelavo podatkov.
  • Dodana je predhodna implementacija API-ja za tujinske funkcije in pomnilnik, ki omogoča aplikacijam interakcijo s kodo in podatki, ki so zunaj Java runtime. Nov API omogoča učinkovito klicanje funkcij, ki ne tečejo v JVM, ter dostop do pomnilnika, ki ga ne obvladuje JVM. Na primer, lahko kličete funkcije iz zunanjih deljenih knjižnic in se sklicujete na podatke procesa brez uporabe JNI.
  • Renderer za macOS, ki zagotavlja delovanje API-ja Java 2D, ki pa je uporabljen v API-ju Swing, je prilagojen za uporabo grafičnega API-ja Metal. Privzeto se na platformi macOS še vedno uporablja OpenGL, za vključitev podpore za Metal pa je potrebno nastaviti parameter „-Dsun.java2d.metal=true“ in imeti vsaj različico macOS 10.14.x.
  • Dodana je različica za platformo macOS/AArch64 (Apple računalniki na osnovi novih čipov Apple M1). Značilnost različice je podpora mehanizmu zaščite pomnilnika W^X (Write XOR Execute), pri katerem strani pomnilnika niso lahko hkrati dostopne za pisanje in izvajanje. (koda se lahko izvrši šele po preklicu pisanja, medtem ko je pisanje v stran pomnilnika možno šele po prepovedi izvajanja).
  • Zavrnjena je uporaba stroge (strictfp) semantike za izraze s plavajočo decimalno vejico. Podpora za dostopno semantiko, uvedeno s posodobitvijo Java 1.2, ki je vključevala poenostavitve za delovanje na zelo starodavnih matematičnih soprocese x87 (po uvedbi SSE2 instrukcij je potreba po dodatni semantiki izginila), je prenehana.
  • Izvedeni so novi tipi vmesnikov za generatorje psevdorabnih števil, kot tudi dodatni algoritmi za kakovostnejše generiranje naključnih števil. Aplikacijam je bila dana možnost izbire algoritma za generiranje psevdorabnih števil. Izboljšana je podpora za generiranje tokov naključnih objektov.
  • Izvedena je obvezna stroga inkapsulacija vseh notranjih elementov JDK, razen kritičnih API-jev, kot je sun.misc.Unsafe. Stroga inkapsulacija blokira poskuse dostopa iz kode do notranjih razredov, metod in polj. Prej se je lahko način stroge inkapsulacije izklopil z možnostjo "—illegal-access=permit", vendar je ta zdaj razglašena za zastarelo. Aplikacije, ki potrebujejo dostop do notranjih razredov, metod in polj, morajo te izrecno opredeliti z možnostjo "—add-opens" ali atributom Add-Opens v manifestni datoteki.
  • Aplikacijam je bila dana možnost opredeljevanja filtrov za deserializacijo podatkov, ki so lahko odvisni od konteksta in se izbira dinamično v povezavi z določenimi operacijami deserializacije. Določeni filtri veljajo za celotno virtualni napravi (na ravni JVM), tj. zajemajo ne le samo aplikacijo, temveč tudi uporabljene tretje knjižnice v aplikaciji.
  • V Swing je dodana metoda javax.swing.filechooser.FileSystemView.getSystemIcon za nalaganje velikih ikon, kar omogoča izboljšano oblikovanje vmesnika na zaslonih z visoko gostoto pikslov (HighDPI).
  • V API-ju java.net.DatagramSocket je uvedena podpora za povezovanje v Multicast skupine brez potrebe po ločenem API-ju java.net.MulticastSocket.
  • Izboljšana je orodje IGV (Ideal Graph Visualizer), ki omogoča interaktivno vizualizacijo vmesne predstavitve kode v JIT-kompilatorju HotSpot VM C2.
  • V JavaDocu, podobno kot pri prevajalniku javac, se ob prikazu napake zdaj natančno navaja številka težavne vrstice v izvirni datoteki in mesto napake.
  • Dodano je svojstvo native.encoding, koje odražava naziv sistemske kodne stranice (UTF-8, koi8-r, cp1251 itd.).
  • Dodano je sučelje java.time.InstantSource, koje omogućava manipulaciju vremenom bez vezivanja za vremensku zonu.
  • Dodan je API java.util.HexFormat za konverziju u heksadecimalni prikaz i obrnuto.
  • U prevodilac je dodan blackhole način rada, koji isključuje operacije izuzimanja neiskorišćenog koda (dead-code elimination), što može biti korisno prilikom testiranja performansi.
  • U Runtime je dodana opcija „-Xlog:async“ za beleženje logova u asinhronom režimu.
  • Pri uspostavljanju zaštićenih veza po defaultu je aktiviran TLS 1.3 (ranije je korišćen TLS 1.2).
  • Preveden je u kategoriju planiranih za brisanje ranije obeleženi zastareli API Applet (java.applet.Applet*, javax.swing.JApplet), koji se koristio za pokretanje Java aplikacija u pregledaču (izgubio je relevantnost nakon prestanka podrške za Java plugin u pregledačima).
  • Preveden je u kategoriju planiranih za brisanje Security Manager, koji je odavno izgubio relevantnost i ostao neiskorišćen nakon prestanka podrške za plugin u pregledačima.
  • Uklonjen je mehanizam RMI Activation, koji je zastareo, prebačen u opcioni status još od Java 8 i skoro se ne koristi u savremenoj praksi.
  • Iz SDK-a je uklonjen eksperimentalni prevodilac koji podržava JIT (just-in-time) za dinamičko prevodjenje Java koda za HotSpot JVM, kao i režim proaktivnog prevodjenja (AOT, ahead-of-time) klasa u mašinski kod pre pokretanja virtuelne mašine. Prevodioc je bio napisan u Javi i zasniva se na radovima projekta Graal. Ističe se da održavanje prevodioca zahteva velike resurse koje ne opravdavaju sami razvoj u uslovima male potražnje među programerima.

Izvor: opennet.ru

Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki 🔥 Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki | ProHoster