Java SE 17 laidiens

Pēc seÅ”u mēneÅ”u izstrādes Oracle ir izlaidusi Java SE 17 (Java Platform, Standard Edition 17), kas izmanto OpenJDK atvērtā pirmkoda projektu kā atsauces ievieÅ”anu. Izņemot dažu novecojuÅ”u funkciju noņemÅ”anu, Java SE 17 saglabā atpakaļsaderÄ«bu ar iepriekŔējiem Java platformas laidieniem ā€” lielākā daļa iepriekÅ” rakstÄ«to Java projektu joprojām darbosies bez izmaiņām, ja tie darbojas jaunajā versijā. Instalējamās Java SE 17 (JDK, JRE un Server JRE) versijas ir sagatavotas operētājsistēmai Linux (x86_64, AArch64), Windows (x86_64) un macOS (x86_64, AArch64). Izstrādāts OpenJDK projektā, Java 17 atsauces ievieÅ”ana ir pilnÄ«bā atvērta saskaņā ar GPLv2 licenci ar GNU ClassPath izņēmumiem, lai nodroÅ”inātu dinamisku saiti ar komerciāliem produktiem.

Java SE 17 ir klasificēts kā ilgtermiņa atbalsta (LTS) laidiens, kas turpinās saņemt atjauninājumus lÄ«dz 2029. gadam. IepriekŔējā Java 16 pavērsiena laidiena atjauninājumi ir pārtraukti. IepriekŔējā Java 11 LTS filiāle tiks atbalstÄ«ta lÄ«dz 2026. gadam. Nākamais LTS izlaidums ir paredzēts 2024. gada septembrÄ«. Atgādinām, ka, sākot ar Java 10 izlaiÅ”anu, projekts pārgāja uz jaunu izstrādes procesu, kas nozÄ«mē Ä«sāku ciklu jaunu laidienu veidoÅ”anai. Jauna funkcionalitāte tagad ir izstrādāta vienā pastāvÄ«gi atjauninātajā galvenajā filiālē, kas ietver gatavas izmaiņas un no kuras filiāles tiek atzarotas ik pēc seÅ”iem mēneÅ”iem, lai stabilizētu jaunus izdevumus.

Jaunās Java 17 funkcijas ietver:

  • Tiek piedāvāta eksperimentāla modeļu saskaņoÅ”anas ievieÅ”ana ā€œslēdžaā€ izteiksmēs, kas ļauj izmantot nevis precÄ«zas vērtÄ«bas ā€œcaseā€ etiÄ·etēs, bet elastÄ«gas veidnes, kas vienlaikus aptver virkni vērtÄ«bu, kurām iepriekÅ” bija nepiecieÅ”ams izmantot apgrÅ«tinoÅ”us ā€œja...citādiā€ izteicienu ķēdes. Turklāt ā€œslēdzimā€ ir iespēja apstrādāt NULL vērtÄ«bas. Objekts o = 123L; Virkne formatēta = slēdzis (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); noklusējuma -> o.toString(); };
  • Stabilizēts atbalsts slēgtām klasēm un saskarnēm, kuras nevar izmantot citas klases un saskarnes, lai mantotu, paplaÅ”inātu vai ignorētu ievieÅ”anu. AizzÄ«mogotās klases nodroÅ”ina arÄ« deklaratÄ«vāku veidu, kā ierobežot virsklases izmantoÅ”anu nekā piekļuves modifikatori, pamatojoties uz nepārprotamu paplaÅ”ināŔanai atļauto apakÅ”klaÅ”u uzskaitÄ«jumu. pakotne com.example.geometry; publiska slēgta klase Forma atļauj com.example.polar.Circle, com.example.quad.TaisnstÅ«ris, com.example.quad.simple.Kvadrāts {ā€¦}
  • Tiek piedāvāts otrs Vector API priekÅ”skatÄ«jums, kas nodroÅ”ina vektoru aprēķinu funkcijas, kas tiek izpildÄ«tas, izmantojot vektoru instrukcijas x86_64 un AArch64 procesoros, un ļauj operācijas vienlaikus piemērot vairākām vērtÄ«bām (SIMD). AtŔķirÄ«bā no HotSpot JIT kompilatora piedāvātajām iespējām skalāro operāciju automātiskai vektorizācijai, jaunais API ļauj skaidri kontrolēt vektorizāciju paralēlai datu apstrādei.
  • Pievienots sveÅ”funkciju un atmiņas API priekÅ”skatÄ«jums, kas ļauj lietojumprogrammām mijiedarboties ar kodu un datiem ārpus Java izpildlaika. Jaunā API ļauj efektÄ«vi izsaukt funkcijas, kas nav JVM, un piekļūt atmiņai, ko nepārvalda JVM. Piemēram, varat izsaukt funkcijas no ārējām koplietotajām bibliotēkām un piekļūt procesa datiem, neizmantojot JNI.
  • MacOS renderÄ“Å”anas dzinējs, kas darbina Java 2D API, kas savukārt nodroÅ”ina Swing API, ir pielāgots metāla grafikas API lietoÅ”anai. MacOS platformā pēc noklusējuma joprojām tiek izmantots OpenGL, un, lai iespējotu Metal atbalstu, ir jāiestata "-Dsun.java2d.metal=true" un jādarbojas vismaz ar MacOS 10.14.x.
  • Pievienots ports macOS/AArch64 platformai (Apple datori, kuru pamatā ir jaunās Apple M1 mikroshēmas). ÄŖpaÅ”a pieslēgvietas funkcija ir atbalsts W^X (Write XOR Execute) atmiņas aizsardzÄ«bas mehānismam, kurā nevar vienlaicÄ«gi piekļūt atmiņas lapām rakstÄ«Å”anai un izpildei. (kodu var izpildÄ«t tikai pēc rakstÄ«Å”anas atspējoÅ”anas, un ierakstÄ«Å”ana atmiņas lapā ir iespējama tikai pēc izpildes atspējoÅ”anas).
  • Atgriezts pie tikai strictfp semantikas izmantoÅ”anas peldoŔā komata izteiksmēm. ā€œNoklusējumaā€ semantikas atbalsts, kas pieejams kopÅ” Java 1.2 izlaiÅ”anas, ir pārtraukts, ieskaitot vienkārÅ”ojumus darbam ar sistēmām ar ļoti veciem x87 matemātikas kopprocesoriem (pēc SSE2 instrukciju parādÄ«Å”anās pazuda nepiecieÅ”amÄ«ba pēc papildu semantikas).
  • Ir ieviesti jauni saskarnes veidi pseidogadÄ«juma skaitļu Ä£eneratoriem, un ir ieviesti papildu algoritmi labākai nejauÅ”o skaitļu Ä£enerÄ“Å”anai. Lietojumprogrammām tiek dota iespēja izvēlēties pseidogadÄ«juma skaitļu Ä£enerÄ“Å”anas algoritmu. Uzlabots atbalsts nejauÅ”u objektu straumju Ä£enerÄ“Å”anai.
  • Stingra visu JDK iekŔējo elementu iekapsulÄ“Å”ana, izņemot kritiskās API, piemēram, sun.misc.Unsafe. Stingra iekapsulÄ“Å”ana bloķē mēģinājumus no koda piekļūt iekŔējām klasēm, metodēm un laukiem. IepriekÅ” stingro iekapsulÄ“Å”anas režīmu varēja atspējot, izmantojot opciju "--illegal-access=permit", taču tagad tas ir novecojis. Lietojumprogrammām, kurām nepiecieÅ”ama piekļuve iekŔējām klasēm, metodēm un laukiem, tie ir skaidri jādefinē, izmantojot opciju --add-opens vai atribÅ«tu Add-Opens manifesta failā.
  • Lietojumprogrammām ir dota iespēja definēt datu deserializācijas filtrus, kas var bÅ«t kontekstjutÄ«gi un dinamiski atlasÄ«ti, pamatojoties uz konkrētām deserializācijas operācijām. NorādÄ«tie filtri ir piemērojami visai virtuālajai maŔīnai (visā JVM), t.i. aptver ne tikai paÅ”u lietojumprogrammu, bet arÄ« lietojumprogrammā izmantotās treÅ”o puÅ”u bibliotēkas.
  • Swing ir pievienojis metodi javax.swing.filechooser.FileSystemView.getSystemIcon, lai ielādētu lielas ikonas, lai uzlabotu lietotāja saskarni augsta izŔķirtspējas ekrānos.
  • Java.net.DatagramSocket API nodroÅ”ina atbalstu savienojuma izveidei ar Multicast grupām, neizmantojot atseviŔķu java.net.MulticastSocket API.
  • Ir uzlabota utilÄ«ta IGV (Ideal Graph Visualizer), kas nodroÅ”ina interaktÄ«vu starpposma koda attēlojuma vizualizāciju HotSpot VM C2 JIT kompilatorā.
  • Programmā JavaDoc pēc analoÄ£ijas ar javac kompilatoru, kad tiek izvadÄ«ta kļūda, tagad tiek norādÄ«ts problemātiskās rindas numurs avota failā un kļūdas atraÅ”anās vieta.
  • Pievienots native.encoding rekvizÄ«ts, kas atspoguļo sistēmas rakstzÄ«mju kodējuma nosaukumu (UTF-8, koi8-r, cp1251 utt.).
  • Ir pievienots interfeiss java.time.InstantSource, kas ļauj manipulēt ar laiku bez atsauces uz laika joslu.
  • Pievienots java.util.HexFormat API konvertÄ“Å”anai uz heksadecimālo attēlojumu un otrādi.
  • Kompilatoram ir pievienots melnā cauruma režīms, kas atspējo miruŔā koda likvidÄ“Å”anas darbÄ«bas, kuras var izmantot, veicot veiktspējas testus.
  • Runtime ir pievienota opcija ā€œ-Xlog:asyncā€, lai reÄ£istrētu žurnālus asinhronā režīmā.
  • Izveidojot droÅ”us savienojumus, TLS 1.3 ir iespējots pēc noklusējuma (iepriekÅ” tika izmantots TLS 1.2).
  • IepriekÅ” pasludinātā par novecojuÅ”o Applet API (java.applet.Applet*, javax.swing.JApplet), kas tika izmantota Java lietojumprogrammu palaiÅ”anai pārlÅ«kprogrammā, ir pārvietota uz kategoriju, kuru paredzēts noņemt (pēc atbalsta beigām zaudēja nozÄ«mi Java spraudnim pārlÅ«kprogrammām).
  • DroŔības pārvaldnieks, kas jau sen ir zaudējis savu aktualitāti un pēc pārlÅ«kprogrammas spraudņa atbalsta beigām izrādÄ«jās nepieprasÄ«ts, ir pārvietots uz to kategoriju, kurus plānots noņemt.
  • Ir noņemts RMI aktivizācijas mehānisms, kas ir novecojis, iekļauts Java 8 opcijas kategorijā un gandrÄ«z nekad netiek izmantots mÅ«sdienu praksē.
  • Eksperimentāls kompilators, kas atbalsta JIT (just-in-time) dinamiskai Java koda kompilācijai HotSpot JVM, kā arÄ« klaÅ”u paredzamās kompilācijas veidu (AOT, pirms laika) maŔīnkodā pirms virtuālās maŔīnas palaiÅ”anas. , ir noņemts no SDK. Kompilators tika uzrakstÄ«ts Java valodā un balstÄ«ts uz Graal projekta darbu. Tiek atzÄ«mēts, ka kompilatoru uzturÄ“Å”ana prasa daudz darbaspēka, kas nav attaisnojams, ja nav pieprasÄ«juma no izstrādātājiem.

Avots: opennet.ru

Pievieno komentāru