Java SE 17 izdanje

Nakon šest mjeseci razvoja, Oracle je objavio platformu Java SE 17 (Java Platform, Standard Edition 17), koja koristi OpenJDK open source projekat kao referentnu implementaciju. Sa izuzetkom uklanjanja nekih zastarjelih funkcija, Java SE 17 održava kompatibilnost unatrag s prethodnim izdanjima Java platforme—većina prethodno napisanih Java projekata će i dalje raditi bez modifikacija kada se pokrene pod novom verzijom. Instalacijske verzije Java SE 17 (JDK, JRE i Server JRE) pripremljene su za Linux (x86_64, AArch64), Windows (x86_64) i macOS (x86_64, AArch64). Razvijena od strane OpenJDK projekta, Java 17 referentna implementacija je potpuno otvorenog koda pod GPLv2 licencom sa GNU ClassPath izuzecima kako bi se omogućilo dinamičko povezivanje sa komercijalnim proizvodima.

Java SE 17 je klasifikovana kao izdanje za dugoročnu podršku (LTS), koje će nastaviti primati ažuriranja do 2029. godine. Ažuriranja za prethodno izdanje Java 16 prekretnica su obustavljena. Prethodna LTS grana Jave 11 će biti podržana do 2026. Sljedeće izdanje LTS-a zakazano je za septembar 2024. Podsjetimo, počevši od izdavanja Jave 10, projekat je prešao na novi razvojni proces, što podrazumijeva kraći ciklus za formiranje novih izdanja. Nova funkcionalnost je sada razvijena u jednoj stalno ažuriranoj glavnoj grani, koja uključuje gotove promjene i iz koje se grane granaju svakih šest mjeseci kako bi se stabilizirala nova izdanja.

Nove funkcije u Javi 17 uključuju:

  • Predložena je eksperimentalna implementacija podudaranja uzoraka u izrazima "switch", koja omogućava korištenje ne točnih vrijednosti u oznakama "case", već fleksibilnih predložaka koji pokrivaju niz vrijednosti odjednom, za koje je ranije bilo potrebno koristiti glomazne lanci izraza “ako...drugo”. Osim toga, “switch” ima mogućnost rukovanja NULL vrijednostima. Objekt o = 123L; String formatted = switch (o) { case Integer i -> String.format("int %d", i); case Dugi l -> String.format("dugi %d", l); case Double d -> String.format("double %f", d); case String s -> String.format("String %s", s); default -> o.toString(); };
  • Stabilizirana podrška za zatvorene klase i sučelja, koje druge klase i sučelja ne mogu koristiti za nasljeđivanje, proširenje ili nadjačavanje implementacije. Zapečaćene klase takođe pružaju deklarativniji način za ograničavanje upotrebe superklase od modifikatora pristupa, na osnovu eksplicitnog navođenja potklasa dozvoljenih za proširenje. paket com.example.geometry; javna zatvorena klasa Shape dozvoljava com.example.polar.Circle, com.example.quad.Rectangle, com.example.quad.simple.Square {…}
  • Predložen je drugi pregled Vector API-ja, koji pruža funkcije za vektorske proračune koje se izvršavaju pomoću vektorskih instrukcija na x86_64 i AArch64 procesorima i omogućavaju da se operacije istovremeno primjenjuju na više vrijednosti (SIMD). Za razliku od mogućnosti koje pruža HotSpot JIT kompajler za auto-vektorizaciju skalarnih operacija, novi API omogućava eksplicitnu kontrolu vektorizacije za paralelnu obradu podataka.
  • Dodan je pregled Foreign Function & Memory API, koji omogućava aplikacijama interakciju sa kodom i podacima izvan Java runtimea. Novi API vam omogućava da efikasno pozivate funkcije koje nisu JVM i pristupate memoriji kojom ne upravlja JVM. Na primjer, možete pozvati funkcije iz vanjskih dijeljenih biblioteka i pristupiti procesnim podacima bez korištenja JNI.
  • MacOS mehanizam za renderiranje koji pokreće Java 2D API, koji zauzvrat pokreće Swing API, prilagođen je za korištenje Metal grafičkog API-ja. MacOS platforma nastavlja da koristi OpenGL prema zadanim postavkama, a omogućavanje podrške za Metal zahtijeva postavljanje "-Dsun.java2d.metal=true" i barem pokretanje macOS-a 10.14.x.
  • Dodan port za macOS/AArch64 platformu (Apple računari bazirani na novim Apple M1 čipovima). Posebna karakteristika porta je podrška za mehanizam zaštite memorije W^X (Write XOR Execute), u kojem se memorijskim stranicama ne može istovremeno pristupiti za pisanje i izvršavanje. (kod se može izvršiti samo nakon što je upisivanje onemogućeno, a pisanje na memorijsku stranicu moguće je samo nakon što je izvršenje onemogućeno).
  • Vraćeno na korištenje samo strictfp semantike za izraze s pomičnim zarezom. Podrška za “podrazumevanu” semantiku, koja je dostupna od izdanja Jave 1.2, je ukinuta, uključujući pojednostavljenja za rad na sistemima sa veoma starim x87 matematičkim koprocesorima (nakon pojave SSE2 instrukcija, nestala je potreba za dodatnom semantikom).
  • Implementirani su novi tipovi interfejsa za generatore pseudoslučajnih brojeva, a implementirani su i dodatni algoritmi za bolje generisanje slučajnih brojeva. Aplikacijama se daje mogućnost izbora algoritma za generisanje pseudoslučajnih brojeva. Poboljšana podrška za generiranje slučajnih tokova objekata.
  • Nametnuta striktna enkapsulacija svih JDK internih elemenata, sa izuzetkom kritičnih API-ja kao što je sun.misc.Unsafe. Stroga enkapsulacija blokira pokušaje koda da pristupi internim klasama, metodama i poljima. Ranije je način stroge enkapsulacije mogao biti onemogućen korištenjem opcije "--illegal-access=permit", ali ovo je sada zastarjelo. Aplikacije koje zahtijevaju pristup internim klasama, metodama i poljima trebaju ih eksplicitno definirati pomoću opcije --add-opens ili atributa Add-Opens u datoteci manifesta.
  • Aplikacijama je data mogućnost da definiraju filtere deserializacije podataka, koji mogu biti kontekstualno osjetljivi i dinamički odabrani na osnovu specifičnih operacija deserializacije. Navedeni filteri su primjenjivi na cijelu virtuelnu mašinu (JVM-wide), tj. pokrivaju ne samo samu aplikaciju, već i biblioteke trećih strana koje se koriste u aplikaciji.
  • Swing je dodao metodu javax.swing.filechooser.FileSystemView.getSystemIcon za učitavanje velikih ikona radi poboljšanja korisničkog sučelja na ekranima visokog DPI.
  • java.net.DatagramSocket API pruža podršku za povezivanje sa Multicast grupama bez potrebe za posebnim java.net.MulticastSocket API-jem.
  • IGV (Ideal Graph Visualizer) uslužni program je poboljšan, pružajući interaktivnu vizualizaciju srednjeg prikaza koda u HotSpot VM C2 JIT kompajleru.
  • U JavaDoc-u, po analogiji sa javac kompajlerom, kada se pojavi greška, sada se prikazuje broj problematične linije u izvornoj datoteci i lokacija greške.
  • Dodato svojstvo native.encoding, koje odražava ime sistemskog kodiranja znakova (UTF-8, koi8-r, cp1251, itd.).
  • Dodan je interfejs java.time.InstantSource, koji omogućava manipulaciju vremenom bez pozivanja na vremensku zonu.
  • Dodan java.util.HexFormat API za pretvaranje u heksadecimalni prikaz i obrnuto.
  • Kompajleru je dodat mod crne rupe, koji onemogućuje operacije eliminacije mrtvog koda, koje se mogu koristiti prilikom provođenja testova performansi.
  • Dodata opcija “-Xlog:async” u Runtime za snimanje dnevnika u asinhronom režimu.
  • Prilikom uspostavljanja bezbednih veza, TLS 1.3 je podrazumevano omogućen (ranije je korišćen TLS 1.2).
  • Prethodno deklarirani zastarjeli Applet API (java.applet.Applet*, javax.swing.JApplet), koji se koristio za pokretanje Java aplikacija u pretraživaču, premješten je u kategoriju planiranih za uklanjanje (izgubio je relevantnost nakon prestanka podrške za Java dodatak za pretraživače).
  • Security Manager, koji je odavno izgubio na važnosti i pokazao se da nije tražen nakon prestanka podrške za dodatak pretraživača, premješten je u kategoriju onih koji su planirani za uklanjanje.
  • Uklonjen je mehanizam RMI aktivacije, koji je zastario, gurnut u kategoriju opcija u Javi 8 i skoro se nikada ne koristi u modernoj praksi.
  • Eksperimentalni kompajler koji podržava JIT (just-in-time) za dinamičku kompilaciju Java koda za HotSpot JVM, kao i način anticipativne kompilacije (AOT, unaprijed) klasa u mašinski kod prije pokretanja virtuelne mašine , je uklonjen iz SDK-a. Kompajler je napisan na Javi i baziran na radu Graal projekta. Primjećuje se da održavanje kompajlera zahtijeva mnogo rada, što nije opravdano kada nema potražnje programera.

izvor: opennet.ru

Dodajte komentar