Izdanje Java SE 17

Nakon šest mjeseci razvoja, Oracle je izdao Java SE 17 (Java Platform, Standard Edition 17), koja koristi OpenJDK projekt otvorenog koda kao referentnu implementaciju. Uz iznimku uklanjanja nekih zastarjelih značajki, Java SE 17 održava kompatibilnost s prethodnim izdanjima Java platforme - većina prethodno napisanih Java projekata radit će bez promjena kada se pokreću pod novom verzijom. Spremne za instalaciju 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 u okviru projekta OpenJDK, referentna implementacija Java 17 potpuno je otvorenog koda pod GPLv2 licencom, s GNU ClassPath iznimkama koje dopuštaju dinamičko povezivanje s komercijalnim proizvodima.

Java SE 17 klasificirana je kao izdanje dugoročne podrške (LTS), koje će nastaviti primati ažuriranja do 2029. godine. Ažuriranja za prethodno izdanje prekretnice Jave 16 su prekinuta. Prethodna LTS grana Jave 11 bit će podržana do 2026. Sljedeće LTS izdanje zakazano je za rujan 2024. Podsjetimo, počevši od izdanja Jave 10, projekt je prešao na novi razvojni proces, koji podrazumijeva kraći ciklus za formiranje novih izdanja. Nova funkcionalnost sada je 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 značajke u Javi 17 uključuju:

  • Predlaže se eksperimentalna implementacija podudaranja uzoraka u izrazima "switch", koja omogućuje korištenje ne točnih vrijednosti u oznakama "case", već fleksibilnih predložaka koji pokrivaju niz vrijednosti odjednom, za što je ranije bilo potrebno koristiti glomazne lanci "if...else" izraza. 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 Long l -> String.format("long %d", l); case Double d -> String.format("double %f", d); case String s -> String.format("Niz %s", s); zadano -> o.toString(); };
  • Stabilizirana podrška za zapečaćene klase i sučelja, koja se ne mogu koristiti od strane drugih klasa i sučelja za nasljeđivanje, proširenje ili nadjačavanje implementacije. Zapečaćene klase također pružaju deklarativniji način za ograničavanje upotrebe superklase od modifikatora pristupa, temeljen na eksplicitnom popisu podklasa dopuštenih za proširenje. paket com.example.geometry; javna zapečaćena klasa Oblik dopušta com.example.polar.Circle, com.example.quad.Rectangle, com.example.quad.simple.Square {…}
  • Predložen je drugi pregled vektorskog API-ja koji pruža funkcije za vektorske izračune koji se izvode pomoću vektorskih instrukcija na x86_64 i AArch64 procesorima i omogućuju simultanu primjenu operacija na višestruke vrijednosti (SIMD). Za razliku od mogućnosti koje nudi HotSpot JIT prevodilac za automatsku vektorizaciju skalarnih operacija, novi API omogućuje eksplicitnu kontrolu vektorizacije za paralelnu obradu podataka.
  • Dodan je pregled API-ja za strane funkcije i memoriju, koji aplikacijama omogućuje interakciju s kodom i podacima izvan vremena izvođenja Jave. Novi API omogućuje učinkovito pozivanje funkcija koje nisu JVM i pristup memoriji kojom upravlja JVM. Na primjer, možete pozivati ​​funkcije iz vanjskih dijeljenih knjižnica i pristupati podacima procesa bez korištenja JNI-ja.
  • MacOS mehanizam za renderiranje koji pokreće Java 2D API, koji zauzvrat pokreće Swing API, prilagođen je za korištenje Metal graphics API-ja. Platforma macOS nastavlja koristiti OpenGL prema zadanim postavkama, a omogućavanje podrške za Metal zahtijeva postavljanje "-Dsun.java2d.metal=true" i pokretanje barem macOS-a 10.14.x.
  • Dodan priključak za macOS/AArch64 platformu (Apple računala temeljena na novim Apple M1 čipovima). Posebna značajka porta je podrška za W^X (Write XOR Execute) mehanizam zaštite memorije, u kojem se memorijskim stranicama ne može istovremeno pristupiti za pisanje i izvođenje. (kod se može izvršiti samo nakon što je pisanje 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 "zadanu" semantiku, dostupnu od izdanja Jave 1.2, je prekinuta, uključujući pojednostavljenja za rad na sustavima s vrlo starim x87 matematičkim koprocesorima (nakon pojave SSE2 instrukcija, nestala je potreba za dodatnom semantikom).
  • Implementirane su nove vrste sučelja za generatore pseudoslučajnih brojeva, a implementirani su i dodatni algoritmi za bolje generiranje slučajnih brojeva. Aplikacijama je dana mogućnost odabira algoritma za generiranje pseudoslučajnih brojeva. Poboljšana podrška za generiranje tokova slučajnih objekata.
  • Nametnuta stroga enkapsulacija svih internih dijelova JDK-a, s izuzetkom kritičnih API-ja kao što je sun.misc.Unsafe. Stroga enkapsulacija blokira pokušaje koda da pristupi internim klasama, metodama i poljima. Prethodno se strogi način enkapsulacije mogao onemogućiti pomoću opcije "--illegal-access=permit", ali to 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 dana mogućnost definiranja filtara za deserijalizaciju podataka, koji mogu biti osjetljivi na kontekst i dinamički odabrani na temelju specifičnih operacija deserijalizacije. Navedeni filtri primjenjivi su na cijeli virtualni stroj (širi JVM), 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 zaslonima s visokim DPI-jem.
  • Java.net.DatagramSocket API pruža podršku za povezivanje s Multicast grupama bez potrebe za zasebnim java.net.MulticastSocket API-jem.
  • Uslužni program IGV (Ideal Graph Visualizer) je poboljšan, pružajući interaktivnu vizualizaciju intermedijarnog predstavljanja koda u HotSpot VM C2 JIT kompajleru.
  • U JavaDoc-u, analogno javac kompajleru, kada se pojavi greška, broj problematične linije u izvornoj datoteci i mjesto greške sada su naznačeni.
  • Dodano je svojstvo native.encoding, odražavajući naziv sistemskog kodiranja znakova (UTF-8, koi8-r, cp1251, itd.).
  • Dodano je sučelje java.time.InstantSource koje omogućuje manipulaciju vremenom bez pozivanja na vremensku zonu.
  • Dodan java.util.HexFormat API za pretvaranje u heksadecimalni prikaz i obrnuto.
  • Kompajleru je dodan crni način rada koji onemogućuje operacije uklanjanja mrtvog koda, što se može koristiti prilikom provođenja testova performansi.
  • Dodana je opcija “-Xlog:async” u Runtime za snimanje dnevnika u asinkronom načinu rada.
  • Prilikom uspostavljanja sigurnih veza, TLS 1.3 je omogućen prema zadanim postavkama (ranije je korišten TLS 1.2).
  • Prethodno proglašen zastarjelim Applet API (java.applet.Applet*, javax.swing.JApplet), koji se koristio za pokretanje Java aplikacija u pregledniku, premješten je u kategoriju predviđenih za uklanjanje (izgubio važnost nakon završetka podrške za Java dodatak za preglednike).
  • Security Manager, koji je odavno izgubio svoju važnost i pokazalo se da nije zatražen nakon završetka podrške za dodatak za preglednik, premješten je u kategoriju onih koji su planirani za uklanjanje.
  • Uklonjen je RMI Activation mehanizam koji je zastario, degradiran u kategoriju opcije u Javi 8 i gotovo se uopće ne koristi u modernoj praksi.
  • Eksperimentalni kompajler koji podržava JIT (just-in-time) za dinamičko kompiliranje Java koda za HotSpot JVM, kao i način anticipacijske kompilacije (AOT, ahead-of-time) klasa u strojni kod prije pokretanja virtualnog stroja , uklonjen je iz SDK-a. Kompajler je napisan u Javi i temelji se na radu projekta Graal. Napominje se da održavanje kompajlera zahtijeva puno rada, što nije opravdano kada nema potražnje od programera.

Izvor: opennet.ru

Dodajte komentar