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