PĂ€rast kuue kuu arendustöö on Oracle vĂ€lja lasknud Java SE 17 platvormi (Java Platform, Standard Edition 17), mille referentsrakenduseks on avatud projekt OpenJDK. VĂ€lja arvatud mĂ”ned aegunud funktsioonide eemaldamised, sĂ€ilitab Java SE 17 tagasitagamise ĂŒhilduvuse eelnevate Java versioonidega â enamik varasematest Java projektidest töötab uue versiooni all ilma mingeid muudatusi tegemata. Installatsiooni jaoks valmis Java SE 17 kogumikud (JDK, JRE ja Server JRE) on ette valmistatud Linuxi (x86_64, AArch64), Windowsi (x86_64) ja macOSi (x86_64, AArch64) jaoks. OpenJDK projekti raames arendatud Java 17 referentsrakendus on tĂ€ielikult avatud GPLv2 litsentsi alusel koos GNU ClassPath'i eranditega, mis lubavad dĂŒnaamilist sidumist kommertsprodukteriga.
Java SE 17 kuulub pikaajalise toetuse (LTS) vĂ€ljaannete kategooriasse, mille vĂ€rskendused ilmuvad kuni 2029. aastani. Java 16 varasema vahevĂ€ljaande vĂ€rskenduste vĂ€ljaandmine on peatatud. Varasem LTS-haru Java 11 toetust jĂ€tkatakse kuni 2026. aastani. JĂ€rgmine LTS-vĂ€ljaanne on planeeritud 2024. aasta septembriks. Tuletame meelde, et alates Java 10 vĂ€ljaandest on projekt lĂ€inud ĂŒle uuele arendusprotsessile, mis hĂ”lmab lĂŒhemat uusversioonide vĂ€ljalaske tsĂŒklit. Uued funktsioonid arenevad nĂŒĂŒd ĂŒhes pidevalt uuenevas master-harus, kuhu lisatakse juba valminud muudatused ja millest jagunetakse iga kuue kuu tagant uusversioonide stabiilsuse harudeks.
Java 17 uudistest vÔib esile tÔsta:
- Katseline eksperimentaalne teostus mustrimise otstarbel vĂ€ljendites "switch", mis vĂ”imaldab "case" mĂ€rgendites kasutada mitte tĂ€pset vÀÀrtust, vaid paindlikke mustreid, mis katavad korraga seeria vÀÀrtusi, mille jaoks tuli varem kasutada mahukaid "ifâŠelse" lauseid. Samuti on "switch" sees tagatud NULL vÀÀrtuste töötlemise vĂ”imalused. 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(); };
- Stabiliseeritud on suletud ("sealed") klasside ja liideste tugi, mida ei saa kasutada teiste klasside ja liideste poolt pĂ€rimise, laiendamise vĂ”i teostuse ĂŒlekirjutamise jaoks. Suletud klassid pakuvad ka deklareerivamat viisi ĂŒlemklassi kasutamise piirimiseks kui juurdepÀÀsukohandajad, mis pĂ”hinevad lubatud alla klasside selges loendis, mis on lubatud laiendamiseks. package com.example.geometry; public sealed class Shape permits com.example.polar.Circle, com.example.quad.Rectangle, com.example.quad.simple.Square {âŠ}
- Esitatud on teine eelnev rakendus API Vector, mis pakub vektorite arvutamise funktsioone, mida tÀidetakse x86_64 ja AArch64 protsessorite vektorite kÀskudega, vÔimaldades samaaegselt rakendada operatsioonid mitmele vÀÀrtusele (SIMD). Erinevalt HotSpot JIT-kogumiku pakutud automaatvektoriseerimise vÔimetest skalaarkÀskude osas vÔimaldab uus API selgelt hallata vektorizatsiooni andmete paralleelseks töötlemiseks.
- Lisatud on eelnev rakendus API Foreign Function & Memory, mille abil rakendused saavad suhelda koodi ja andmetega, mis asuvad vĂ€ljaspool Java runtime'i. Uus API vĂ”imaldab tĂ”husalt kutsuda ĂŒles funktsioone, mis ei tööta JVM-is, ja pÀÀseda ligi JVM-ist mittehallatavale mĂ€lule. NĂ€iteks saab kutsuda ĂŒles funktsioone vĂ€lisest jagatud teegist ja pÀÀseda ligi protsessi andmetele ilma JNI kasutamata.
- macOS jaoks mĂ”eldud renderdamismootor, mis toetab Java 2D API-d, mis omakorda on seotud Swing API-ga, kohandatud Metal graafilise API kasutamiseks. MacOS-il jÀÀb vaikimisi kasutusele OpenGL, kuid Metal toega töötamiseks on vajalik seada parameeter â-Dsun.java2d.metal=trueâ ja kasutada vĂ€hemalt macOS 10.14.x versiooni.
- Lisatud port macOS/AArch64 platvormile (Apple'i arvutid, mis pĂ”hinevad uutest Apple M1 kiipidest). Porti eripĂ€ra on W^X (Write XOR Execute) mĂ€lu kaitsemehhanismi tugi, kus mĂ€lu lehekĂŒljed ei saa olla samaaegselt kirjutamiseks ja tĂ€itmiseks kĂ€ttesaadavad. (koodi saab tĂ€ita ainult pĂ€rast kirjutamise keelamist ja lehekĂŒljel saab kirjutada ainult pĂ€rast tĂ€itmise keelamist).
- Tagasi on toodud ainult range (strictfp) semantika ujuvate komade vĂ€ljendite jaoks. Peatatud on alates Java 1.2 versioonist toetatud âdefaultâ semantika, mis sisaldas lihtsustusi vĂ€ga vanade x87 matemaatikakoprosessoritega sĂŒsteemide jaoks (pĂ€rast SSE2 instruktsioonide kasutuselevĂ”ttu kadus vajadus tĂ€iendava semantika jĂ€rele).
- Uute pseudojuhuslike numbrite generaatorite liideste tĂŒĂŒbid on rakendatud ning lisaks on ellu viidud tĂ€iendavad algoritmid juhuslike numbrite kvaliteetseks genereerimiseks. Rakendustele on antud vĂ”imalus valida pseudojuhuslike numbrite genereerimise algoritm. Olemasolevaid juhuslike objektide voogude genereerimise toetust on parandatud.
- On rakendatud kohustuslik rangelt kapseldamine kĂ”igist JDK sisemistest elementidest, vĂ€lja arvatud kriitilised API-d, nĂ€iteks sun.misc.Unsafe. Rangelt kapseldamine blokeerib katse suhelda koodis sisemiste klasside, meetodite ja vĂ€ljadega. Varem sai ranget kapseldamist vĂ€lja lĂŒlitada valikuga "âillegal-access=permit", kuid nĂŒĂŒd on see dekaareerimisele lĂ€hedal. Rakenduste jaoks, mis vajavad ligipÀÀsu sisemistele klassidele, meetoditele ja vĂ€ljadele, tuleb need selgelt mÀÀrata valikuga "âadd-opens" vĂ”i manifestifaili Add-Opens atribuudi abil.
- Rakendustele on antud vĂ”imalus mÀÀratleda filtreid andmete deserialiseerimiseks, mis vĂ”ivad sĂ”ltuda kontekstist ja olla dĂŒnaamiliselt valitud, et siduda teatud deserialiseerimisoperatsioonidega. MÀÀratud filtrid on kohaldatavad kogu virtuaalmasinas (JVM-laia), st. hĂ”lmavad mitte ainult rakendust, vaid ka rakenduses kasutatavaid kolmanda osapoole teeke.
- Swing'i juurde on lisatud meetod javax.swing.filechooser.FileSystemView.getSystemIcon, mis vÔimaldab laadida suuremaid ikooni, parandades kasutajaliidese kujundust kÔrge pikslitihedusega ekraanidel (HighDPI).
- API java.net.DatagramSocket on rakendatud toega Multicast gruppide ĂŒhendamiseks ilma eraldi API java.net.MulticastSocket kasutamiseta.
- On tÀiustatud utiliiti IGV (Ideal Graph Visualizer), mis pakub interaktiivset visuaalset esitust JIT-kompilaatori HotSpot VM C2 vahepealsest koodiesitusest.
- JavaDoc'is, sarnaselt kompilandriga javac, tuuakse nĂŒĂŒd veateate vĂ€ljundis vĂ€lja probleemse rea number allikafailis ja vea koht.
- Lisatud omadus native.encoding, mis kajastab sĂŒsteemi mĂ€rgikoode (UTF-8, koi8-r, cp1251 jne).
- Lisatud liides java.time.InstantSource, mis vÔimaldab ajaga manipuleerimist ajavööndist sÔltumatult.
- Lisatud API java.util.HexFormat, mis vĂ”imaldab teisendada kuueteistkĂŒmnendisse ja vastupidi.
- Kompilaatorisse on lisatud blackhole reĆŸiim, mis keelab kasutamata koodi erandid (dead-code elimination), mida saab kasutada jĂ”udluse testimisel.
- Runtime'i on lisatud valik â-Xlog:asyncâ logide asĂŒnkroonseks salvestamiseks.
- Kaitstud ĂŒhenduste loomisel on vaikimisi kasutusele vĂ”etud TLS 1.3 (varasema TLS 1.2 asemel).
- Varem aegunud API Applet (java.applet.Applet*, javax.swing.JApplet), mida kasutati Java rakenduste kÀivitamiseks brauseris, on viidud kustutamiseks planeeritute kategooriasse (sest Java brauseriplaadi toetamine on lÔpetatud).
- Aegunud ja enam ei kasutatav Security Manager on viidud kustutamiseks planeeritute kategooriasse, kuna selle tugi brauseri pistikprogrammidele on lÔpetatud.
- RMI Activation mehhanism on eemaldatud, kuna see on vananenud, viidatud Java 8-sse ja seda ei rakendata enam tÀnapÀeva praktikas.
- SDK-st eemaldati eksperimentaalne kompilaator, mis toetas JIT (just-in-time) Java koodi dĂŒnaamiliseks kompileerimiseks HotSpot JVM-ile, samuti AOT (ahead-of-time) klasside prognoositava kompileerimise reĆŸiim masinkoodiks enne virtuaalmasina kĂ€ivitamist. Kompilaator oli kirjutatud Java keeles ja pĂ”hines Graal projekti tulemustel. MĂ€rgitakse, et kompilaatori hooldamine nĂ”uab suurt töömahtu, mis ei ole Ă”igustatud arendajate nĂ”udmise puudumise tingimustes.
Allikas: opennet.ru
