Izdanje Java SE 18

Nakon šest mjeseci razvoja, Oracle je izdao Java SE 18 (Java Platform, Standard Edition 18), koja koristi OpenJDK projekt otvorenog koda kao referentnu implementaciju. Uz iznimku uklanjanja nekih zastarjelih značajki, Java SE 18 održava kompatibilnost s prethodnim izdanjima Java platforme - većina prethodno napisanih Java projekata radit će bez promjena kada se pokreću pod novom verzijom. Spremne za instalaciju verzije Java SE 18 (JDK, JRE i Server JRE) pripremljene su za Linux (x86_64, AArch64), Windows (x86_64) i macOS (x86_64, AArch64). Razvijena u okviru projekta OpenJDK, referentna implementacija Java 18 potpuno je otvorenog koda pod GPLv2 licencom, s GNU ClassPath iznimkama koje dopuštaju dinamičko povezivanje s komercijalnim proizvodima.

Java SE 18 klasificirana je kao redovita verzija podrške i nastavit će primati ažuriranja do sljedećeg izdanja. Grana dugoročne podrške (LTS) trebala bi biti Java SE 17, koja će nastaviti primati ažuriranja do 2029. godine. Podsjetimo, počevši od izdanja Jave 10, projekt je prešao na novi razvojni proces, koji podrazumijeva kraći ciklus za formiranje novih izdanja. Nova funkcionalnost sada je razvijena u jednoj stalno ažuriranoj glavnoj grani, koja uključuje gotove promjene i iz koje se grane granaju svakih šest mjeseci kako bi se stabilizirala nova izdanja.

Nove značajke u Javi 18 uključuju:

  • Zadano kodiranje je UTF-8. Java API-ji koji obrađuju tekstualne podatke na temelju kodiranja znakova sada će prema zadanim postavkama koristiti UTF-8 na svim platformama, bez obzira na postavke sustava i lokalne postavke. Za povratak na staro ponašanje, gdje se kodiranje odabire na temelju lokalizacije sustava, možete koristiti opciju "-Dfile.encoding=COMPAT".
  • Paket uključuje paket com.sun.net.httpserver, koji uključuje uslužni program jwebserver i knjižnični API s implementacijom jednostavnog http poslužitelja za posluživanje statičkog sadržaja (CGI i rukovatelji slični servletu nisu podržani). Ugrađeni HTTP poslužitelj nije optimiziran za radna opterećenja i ne podržava kontrolu pristupa i autentifikaciju, budući da je prvenstveno namijenjen za korištenje u procesu razvoja za projekte izrade prototipa, otklanjanja pogrešaka i testiranja.
  • JavaDoc pruža podršku za oznaku "@snippet" za ugradnju radnih primjera i isječaka koda u API dokumentaciju, gdje možete koristiti alate za provjeru valjanosti, isticanje sintakse i IDE integraciju.
  • Implementacija java.lang.reflect API-ja (Core Reflection), dizajniranog za dobivanje informacija o metodama, poljima i konstruktorima klasa, kao i pristup internoj strukturi klasa, je redizajnirana. Sam java.lang.reflect API ostaje nepromijenjen, ali je sada implementiran korištenjem metoda koje pruža modul java.lang.invoke, umjesto korištenja generatora bajt koda. Promjena nam je omogućila objedinjavanje implementacija java.lang.reflect i java.lang.invoke i pojednostavljenje njihovog održavanja.
  • Predložen je treći pregled vektorskog API-ja, koji pruža funkcije za vektorske izračune koji se izvode pomoću vektorskih instrukcija na x86_64 i AArch64 procesorima i omogućuju simultanu primjenu operacija na višestruke vrijednosti (SIMD). Za razliku od mogućnosti koje pruža HotSpot JIT kompajler za automatsku vektorizaciju skalarnih operacija, novi API omogućuje eksplicitnu kontrolu vektorizacije za paralelnu obradu podataka.
  • Dodano SPI sučelje (sučelje pružatelja usluga) za razrješavanje naziva hostova i IP adresa, što vam omogućuje korištenje alternativnih razlučivača u java.net.InetAddress koji nisu vezani za rukovatelje koje nudi operativni sustav.
  • Drugi pregled API-ja za strane funkcije i memoriju omogućuje aplikacijama interakciju s kodom i podacima izvan vremena izvođenja Jave. Novi API omogućuje učinkovito pozivanje funkcija koje nisu JVM i pristup memoriji kojom upravlja JVM. Na primjer, možete pozivati ​​funkcije iz vanjskih dijeljenih knjižnica i pristupati podacima procesa bez korištenja JNI-ja.
  • Dodana je druga eksperimentalna implementacija podudaranja uzoraka u "switch" izrazima, dopuštajući upotrebu fleksibilnih uzoraka u oznakama "case" umjesto točnih vrijednosti, pokrivajući niz vrijednosti odjednom, za koje je prethodno bilo potrebno koristiti glomazni lanci "ako... inače" izraza. Objekt 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("Niz %s", s); zadano -> o.toString(); };
  • Mehanizam finalizacije i njegove povezane metode kao što su Object.finalize(), Enum.finalize(), Runtime.runFinalisation() i System.runFinalisation() su zastarjeli i bit će onemogućeni u budućem izdanju.
  • Skupljači smeća ZGC (Z Garbage Collector), SerialGC i ParallelGC skupljači smeća podržavaju deduplikaciju redaka.

Izvor: opennet.ru

Dodajte komentar