Java SE 18 bertsioa

Sei hilabeteko garapenaren ondoren, Oracle-k Java SE 18 (Java Platform, Standard Edition 18) kaleratu zuen, kode irekiko OpenJDK proiektua erreferentziazko inplementazio gisa erabiltzen duena. Ezaugarri zaharkitu batzuk kentzea izan ezik, Java SE 18-k atzerako bateragarritasuna mantentzen du Java plataformaren aurreko bertsioekin - lehen idatzitako Java proiektu gehienek aldaketarik gabe funtzionatuko dute bertsio berriarekin exekutatzen direnean. Java SE 18 (JDK, JRE eta Server JRE) instalatzeko prest dauden eraikuntzak Linux (x86_64, AArch64), Windows (x86_64) eta macOS (x86_64, AArch64) prestatuta daude. OpenJDK proiektuak garatua, Java 18 erreferentziako inplementazioa guztiz irekia da GPLv2 lizentziapean, eta GNU ClassPath-en salbuespenek produktu komertzialekin lotura dinamikoa ahalbidetzen dute.

Java SE 18 ohiko laguntza-oharra gisa sailkatuta dago eta eguneraketak jasotzen jarraituko du hurrengo bertsiora arte. Epe Luzeko Laguntza (LTS) adarrak Java SE 17 izan behar du, eta eguneraketak jasotzen jarraituko du 2029ra arte. Gogora dezagun Java 10 kaleratzetik hasita, proiektua garapen prozesu berri batera aldatu zela, bertsio berrien eraketarako ziklo laburragoa suposatuz. Gaur egun, funtzionalitate berriak etengabe eguneratutako adar nagusi batean garatzen dira, prest egindako aldaketak barne hartzen dituena eta bertatik sei hilabetean behin adarrak adarkatzen dira bertsio berriak egonkortzeko.

Java 18-en eginbide berriak hauek dira:

  • Kode lehenetsia UTF-8 da. Karaktereen kodeketan oinarritutako testu-datuak prozesatzen dituzten Java APIek orain UTF-8 erabiliko dute lehenespenez plataforma guztietan, sistemaren ezarpenak eta tokiko ezarpenak kontuan hartu gabe. Antzinako portaerara itzultzeko, non kodeketa sistemaren lokalizazioaren arabera aukeratzen den, "-Dfile.encoding=COMPAT" aukera erabil dezakezu.
  • Paketeak com.sun.net.httpserver paketea barne hartzen du, jwebserver utilitatea eta liburutegiko APIa barne hartzen dituena http zerbitzari soil baten ezarpenarekin eduki estatikoa hornitzeko (CGI eta servlet-en antzeko kudeatzaileak ez dira onartzen). Integratutako HTTP zerbitzaria ez dago optimizatuta lan kargarako eta ez du sarbide-kontrola eta autentifikazioa onartzen, proiektuak prototipatzeko, arazketarako eta probak egiteko garapen-prozesuan erabiltzeko helburu nagusia baita.
  • JavaDoc-ek "@snippet" etiketarako laguntza eskaintzen du lan-adibideak eta kode zatiak APIko dokumentazioan txertatzeko, non baliozkotzeko tresnak, sintaxia nabarmentzea eta IDE integrazioa erabil ditzakezun.
  • Metodoei, eremuei eta klase-eraikitzaileei buruzko informazioa lortzeko diseinatutako java.lang.reflect APIaren (Core Reflection) inplementazioa, baita klaseen barne egiturarako sarbidea ere, birdiseinatu da. java.lang.reflect APIa bera ez da aldatu, baina orain java.lang.invoke moduluak emandako metodoen heldulekuak erabiliz inplementatzen da, bytecode-sorgailuak erabili beharrean. Aldaketari esker, java.lang.reflect eta java.lang.invoke inplementazioak bateratu eta haien mantentze-lanak erraztu genituen.
  • Vector APIaren hirugarren aurrebista bat proposatu da, x86_64 eta AArch64 prozesadoreetan bektore-argibideen bidez exekutatzen diren kalkulu bektorialetarako funtzioak eskainiz eta balio anitzetan (SIMD) eragiketak aldi berean aplikatzeko aukera ematen dutenak. HotSpot JIT konpiladoreak eragiketa eskalarren auto-vektorizaziorako eskaintzen dituen gaitasunek ez bezala, API berriak datu paraleloen prozesamendurako bektoreizazioa esplizituki kontrolatzea ahalbidetzen du.
  • Ostalariaren izenak eta IP helbideak ebazteko SPI interfazea (zerbitzu-hornitzailearen interfazea) gehitu da, sistema eragileak eskaintzen dituen kudeatzaileei lotuta ez dauden java.net.InetAddress-en ebatzaile alternatiboak erabiltzeko aukera emanez.
  • Foreign Function & Memory APIaren bigarren aurrebista bat eskaintzen da, eta aplikazioek Java exekuzio-denboratik kanpo kode eta datuekin elkarreragin dezakete. API berriak JVM ez diren funtzioei modu eraginkorrean deitzeko eta JVMk kudeatutako memorian sartzeko aukera ematen du. Adibidez, kanpoko liburutegi partekatuetako funtzioetara dei dezakezu eta prozesuko datuak atzitu JNI erabili gabe.
  • "Switch" esamoldeetan ereduen parekatzearen bigarren inplementazio esperimental bat gehitu da, "kasu" etiketetan eredu malguak erabiltzea ahalbidetuz, balio zehatzak baino, balio batzuk aldi berean hartzen dituena, eta horretarako beharrezkoa zen aurretik erabili. β€œbaldin... bestela” esapideen kate astunak. Objektua o = 123L; String formatua = switch (o) { case Integer i -> String.format("int %d", i); case Long l -> String.format("luzea %d", l); case d Bikoitza -> String.format("%f bikoitza", d); case String s -> String.format("String %s", s); lehenetsia -> o.toString(); };
  • Amaitzeko mekanismoa eta hari lotutako metodoak, hala nola Object.finalize(), Enum.finalize(), Runtime.runFinalization() eta System.runFinalization() zaharkituta geratu dira eta etorkizuneko bertsio batean desgaitu egingo dira.
  • ZGC (Z Garbage Collector), SerialGC eta ParallelGC zabor biltzaileek errenkaden desduplicazioa onartzen dute.

Iturria: opennet.ru

Gehitu iruzkin berria