Pēc sešu mēnešu izstrādes uzņēmums Oracle laidis klajā Java SE 18 (Java Platform, Standard Edition 18), kā etalona realizācija izmantojot atvērto projektu OpenJDK. Izņemot dažādu novecojušu funkciju izņemšanu, Java SE 18 saglabā atpakaļsaderību ar iepriekšējiem Java platformas laidieniem — lielākā daļa iepriekš rakstīto Java projektu darbosies bez izmaiņām jaunajā versijā. Uzstādīšanai gatavi Java SE 18 (JDK, JRE un Server JRE) komplekti ir sagatavoti Linux (x86_64, AArch64), Windows (x86_64) un macOS (x86_64, AArch64). OpenJDK projektā izstrādātā Java 18 etalona realizācija pilnībā ir atvērta saskaņā ar GPLv2 licenci ar GNU ClassPath izņēmumiem, kas atļauj dinamisku saistīšanu ar komerciāliem produktiem.
Java SE 18 pieder pie izlaidumiem ar parasto atbalsta termiņu, atjauninājumi tiks izdoti līdz nākamā izlaiduma parādīšanās. Kā ilgstoša atbalsta (LTS) versija jāizmanto Java SE 17, atjauninājumi kurai tiks izdoti līdz 2029. gadam. Atgādinām, ka, sākot ar Java 10 izlaidumu, projekts pārgāja uz jaunu izstrādes procesu, kas paredz īsākus jauno izlaidumu izstrādes ciklus. Jaunā funkcionalitāte tagad tiek attīstīta vienā pastāvīgi atjaunotā master-zarā, kuru iekļauj gatavas izmaiņas un no kuras ik pēc sešiem mēnešiem tiek veidotas stabilizācijas zaras jaunu izlaidumu izveidei.
No jauninājumiem Java 18 var izcelt:
- Pēc noklusējuma tiek izmantota UTF-8 kodēšana. Java API, kas apstrādā teksta datus, ņemot vērā simbolu kodējumu, tagad pēc noklusējuma izmantos UTF-8 visās platformās, neatkarīgi no sistēmas iestatījumiem un izvēlētās lokalizācijas. Lai atgrieztos pie vecā uzvedības modeļa, kur kodējums tiek izvēlēts, ņemot vērā sistēmas lokalizāciju, var izmantot parametrus „-Dfile.encoding=COMPAT“.
- Iekļauts pakotne com.sun.net.httpserver, kas ietver rīku jwebserver un bibliotēkas API ar vienkārša http-servera realizāciju statiska satura nodrošināšanai (CGI un servlet līdzīgas apstrādātāji netiek atbalstīti). Iebūvētais http-serveris nav optimizēts darbam ar slodzēm un neatbalsta piekļuves kontroli un autentifikāciju, jo tas ir galvenokārt paredzēts izstrādes procesa laikā, lai izveidotu prototipus, veiktu debugu un testētu projektus.
- JavaDoc ir ieviesta atbalsts tagam «@snippet» darbīgu piemēru un koda fragmentu iekļaušanai API dokumentācijā, uz kuriem var attiecināt rīkus, lai pārbaudītu pareizību, sinhronizētu sintaksi un integrētu ar IDE.
- Pārstrādāta API java.lang.reflect (Core Reflection) realizācija, kas paredzēta informācijas iegūšanai par klasēm, laukiem un konstruktoriem, kā arī piekļuvei iekšējai klasēm struktūrai. Pašas API java.lang.reflect palika nemainīgas, taču tagad tās tiek realizētas, izmantojot metodes aprakstus (method handles), kurus sniedz java.lang.invoke modulis, nevis izmantojot байtkoda ģeneratorus. Izmaiņas ļāva vienkāršot java.lang.reflect un java.lang.invoke realizācijas un atviegloja to uzturēšanu.
- Ieteikta trešā priekšizstrāde API Vector, kas nodrošina funkcijas vektoru aprēķiniem, kas tiek veikti, izmantojot x86_64 un AArch64 procesoru vektoru instrukcijas un ļauj vienlaicīgi pielietot operācijas vairākiem vērtībām (SIMD). Atšķirībā no HotSpot JIT kompilatora piedāvātajām automātiskās vektorizācijas iespējām skalarām operācijām, jaunais API ļauj skaidri pārvaldīt vektorizāciju paralēlas datu apstrādes veikšanai.
- Pievienots SPI interfeiss (service-provider interface) vārdu risināšanai IP adreses, kas ļauj izmantot java.net.InetAddress alternatīvus risinātājus, kas nav piesaistīti operētājsistēmas piedāvātajiem apstrādātājiem.
- Tika izstrādāta otrā priekšizpētes realizācija API Foreign Function & Memory, kas ļauj lietotnēm mijiedarboties ar kodu un datiem, kas atrodas ārpus Java runtime. Jaunais API efektīvi ļauj izsaukt funkcijas, kas tiek izpildītas ārpus JVM, un piekļūt JVM nekontrolētai atmiņai. Piemēram, var izsaukt funkcijas no ārējām koplietotām bibliotēkām un piekļūt procesa datiem bez JNI izmantošanas.
- Pievienota otrā eksperimentālā realizācija paraugu saskaņošanai izteiksmēs «switch», kas ļauj «case» marķieros izmantot neprecīzas vērtības, bet elastīgus paraugus, kas aptver veselu vērtību sēriju, kurām iepriekš bija jāizmanto sarežģītas «if…else» izteiksmes. 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(); };
- Atzīts par novecojušu un tiks atspējots vienā no nākamajām laidienam mehānisms finalizācijas, kā arī saistītās metodes, piemēram, Object.finalize(), Enum.finalize(), Runtime.runFinalization() un System.runFinalization().
- Atkritumu vākšanas izstrādātājos ZGC (Z Garbage Collector), SerialGC un ParallelGC ir ieviesta virkņu deduplicēšanas atbalsts.
Avots: opennet.lv
