Publikimi i Java SE 18

Pas gjashtë muajsh zhvillimi, Oracle ka lëshuar platformën Java SE 18 (Java Platform, Standard Edition 18), e cila përdor projektin OpenJDK me burim të hapur si një zbatim referencë. Me përjashtim të heqjes së disa veçorive të vjetruara, Java SE 18 ruan përputhshmërinë e prapambetur me versionet e mëparshme të platformës Java—shumica e projekteve Java të shkruara më parë do të vazhdojnë të funksionojnë pa modifikuar kur ekzekutohen sipas versionit të ri. Ndërtimet e instalueshme të Java SE 18 (JDK, JRE dhe Server JRE) përgatiten për Linux (x86_64, AArch64), Windows (x86_64) dhe macOS (x86_64, AArch64). Zhvilluar nga projekti OpenJDK, zbatimi i referencës Java 18 është plotësisht me burim të hapur nën licencën GPLv2 me përjashtime të GNU ClassPath për të lejuar lidhjen dinamike me produktet komerciale.

Java SE 18 kategorizohet si një version i rregullt mbështetës, me përditësime që do të lëshohen përpara lëshimit të ardhshëm. Dega Long Term Support (LTS) duhet të jetë Java SE 17, e cila do të marrë përditësime deri në vitin 2029. Kujtojmë se duke filluar me lëshimin e Java 10, projekti kaloi në një proces të ri zhvillimi, i cili nënkupton një cikël më të shkurtër për formimin e publikimeve të reja. Funksionaliteti i ri po zhvillohet tani në një degë kryesore të përditësuar vazhdimisht, e cila përfshin ndryshime tashmë të përfunduara dhe nga e cila degët degëzohen çdo gjashtë muaj për të stabilizuar publikimet e reja.

Karakteristikat e reja në Java 18 përfshijnë:

  • Kodimi i parazgjedhur është UTF-8. API-të Java që përpunojnë të dhënat e tekstit bazuar në kodimin e karaktereve tani do të përdorin UTF-8 si parazgjedhje në të gjitha platformat, pavarësisht nga cilësimet e sistemit dhe cilësimet e vendndodhjes. Për t'u rikthyer në sjelljen e vjetër, ku kodimi zgjidhet bazuar në vendndodhjen e sistemit, mund të përdorni opsionin "-Dfile.encoding=COMPAT".
  • Paketa përfshin paketën com.sun.net.httpserver, e cila përfshin shërbimin jwebserver dhe API-në e bibliotekës me implementimin e një serveri të thjeshtë http për të shërbyer përmbajtje statike (CGI dhe mbajtës të ngjashëm me servlet nuk mbështeten). Serveri i integruar HTTP nuk është i optimizuar për ngarkesat e punës dhe nuk mbështet kontrollin e aksesit dhe vërtetimin, pasi synon kryesisht përdorimin në procesin e zhvillimit për projektet e prototipit, korrigjimit dhe testimit.
  • JavaDoc ofron mbështetje për etiketën "@snippet" për të futur shembujt e punës dhe copat e kodit në dokumentacionin API, ku mund të përdorni mjetet e vërtetimit, theksimin e sintaksës dhe integrimin IDE.
  • Zbatimi i java.lang.reflect API (Reflektimi Bërthamë), i krijuar për të marrë informacion në lidhje me metodat, fushat dhe konstruktorët e klasave, si dhe aksesin në strukturën e brendshme të klasave, është ridizajnuar. Vetë API java.lang.reflect mbetet i pandryshuar, por tani zbatohet duke përdorur dorezat e metodave të ofruara nga moduli java.lang.invoke, në vend të përdorimit të gjeneratorëve të kodeve të bajtit. Ndryshimi na lejoi të unifikonim implementimet e java.lang.reflect dhe java.lang.invoke dhe të thjeshtojmë mirëmbajtjen e tyre.
  • Është propozuar një vrojtim i tretë i Vector API, duke ofruar funksione për llogaritjet e vektorit që ekzekutohen duke përdorur udhëzime vektoriale në procesorët x86_64 dhe AArch64 dhe lejojnë që operacionet të zbatohen njëkohësisht në vlera të shumta (SIMD). Ndryshe nga aftësitë e ofruara në përpiluesin HotSpot JIT për vektorizimin automatik të operacioneve skalare, API i ri bën të mundur kontrollin e qartë të vektorizimit për përpunimin paralel të të dhënave.
  • U shtua ndërfaqja SPI (ndërfaqja e ofruesit të shërbimit) për zgjidhjen e emrave të hosteve dhe adresave IP, duke ju lejuar të përdorni zgjidhës alternativë në java.net.InetAddress që nuk janë të lidhura me mbajtësit e ofruar nga sistemi operativ.
  • Ofrohet një pamje e dytë paraprake e API-së së funksionit të huaj dhe kujtesës, duke i lejuar aplikacionet të ndërveprojnë me kodin dhe të dhënat jashtë kohës së ekzekutimit të Java. API i ri ju lejon të telefononi në mënyrë efikase funksione jo-JVM dhe të përdorni memorien që nuk menaxhohet nga JVM. Për shembull, mund të telefononi funksione nga bibliotekat e jashtme të përbashkëta dhe të përdorni të dhënat e procesit pa përdorur JNI.
  • Është shtuar një zbatim i dytë eksperimental i përputhjes së modeleve në shprehjet "çelës", duke lejuar përdorimin e modeleve fleksibël në etiketat "rast" në vend të vlerave të sakta, duke mbuluar një sërë vlerash menjëherë, për të cilat më parë ishte e nevojshme të përdoreshin zinxhirë të rëndë të shprehjeve “nëse...ndryshe”. Objekti o = 123L; String formatted = switch (o) { case Numri i plotë 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(); };
  • Mekanizmi i finalizimit dhe metodat e lidhura me të si Object.finalize(), Enum.finalize(), Runtime.runFinalization() dhe System.runFinalization() janë vjetëruar dhe do të çaktivizohen në një version të ardhshëm.
  • Mbledhësit e mbeturinave ZGC (Z Garbage Collector), SerialGC dhe ParallelGC mbështesin heqjen e dyfishimit të rreshtave.

Burimi: opennet.ru

Shto një koment