Java SE 18 izdanje

Nakon šest mjeseci razvoja, Oracle je objavio platformu Java SE 18 (Java Platform, Standard Edition 18), koja koristi OpenJDK open source projekat kao referentnu implementaciju. Sa izuzetkom uklanjanja nekih zastarjelih funkcija, Java SE 18 održava kompatibilnost unatrag s prethodnim izdanjima Java platforme—većina prethodno napisanih Java projekata će i dalje raditi bez modifikacija kada se pokrene pod novom verzijom. Instalacijske 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 od strane OpenJDK projekta, Java 18 referentna implementacija je potpuno otvorenog koda pod GPLv2 licencom sa GNU ClassPath izuzecima kako bi se omogućilo dinamičko povezivanje sa komercijalnim proizvodima.

Java SE 18 je kategorizirana kao redovno izdanje podrške, s ažuriranjima koja će biti objavljena prije sljedećeg izdanja. Ogranak za dugoročnu podršku (LTS) bi trebao biti Java SE 17, koji će primati ažuriranja do 2029. godine. Podsjetimo, počevši od izdavanja Jave 10, projekat je prešao na novi razvojni proces, koji podrazumijeva kraći ciklus za formiranje novih izdanja. Nova funkcionalnost se sada razvija u jednoj stalno ažuriranoj glavnoj grani, koja uključuje već završene promjene i iz koje se grane granaju svakih šest mjeseci kako bi se stabilizirala nova izdanja.

Nove funkcije u Javi 18 uključuju:

  • Podrazumevano kodiranje je UTF-8. Java API-ji koji obrađuju tekstualne podatke na osnovu kodiranja znakova sada će po defaultu koristiti UTF-8 na svim platformama, bez obzira na sistemske postavke i postavke lokalizacije. Da biste se vratili na staro ponašanje, gdje se kodiranje bira na osnovu lokalizacije sistema, možete koristiti opciju "-Dfile.encoding=COMPAT".
  • Paket uključuje paket com.sun.net.httpserver, koji uključuje uslužni program jwebserver i bibliotečki API sa implementacijom jednostavnog http servera za serviranje statičkog sadržaja (CGI i rukovaoci slični servletima nisu podržani). Ugrađeni HTTP server nije optimizovan za radna opterećenja i ne podržava kontrolu pristupa i autentifikaciju, jer je prvenstveno namenjen upotrebi u procesu razvoja za izradu prototipova, otklanjanje grešaka i testiranje projekata.
  • 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 dobijanje informacija o metodama, poljima i konstruktorima klasa, kao i pristup internoj strukturi klasa, je redizajnirana. Sam API java.lang.reflect ostaje nepromijenjen, ali je sada implementiran korištenjem rukohvata metoda koje obezbjeđuje modul java.lang.invoke, umjesto korištenja generatora bajtkoda. Promjena nam je omogućila da ujedinimo implementacije java.lang.reflect i java.lang.invoke i pojednostavimo njihovo održavanje.
  • Predložen je treći pregled Vector API-ja, koji pruža funkcije za vektorske proračune koje se izvršavaju pomoću vektorskih instrukcija na x86_64 i AArch64 procesorima i omogućavaju da se operacije istovremeno primjenjuju na više vrijednosti (SIMD). Za razliku od mogućnosti koje pruža HotSpot JIT kompajler za auto-vektorizaciju skalarnih operacija, novi API omogućava eksplicitnu kontrolu vektorizacije za paralelnu obradu podataka.
  • Dodat SPI interfejs (interfejs dobavljača) za rešavanje imena hostova i IP adresa, omogućavajući vam da koristite alternativne razrešivače u java.net.InetAddress koji nisu vezani za rukovaoce koje nudi operativni sistem.
  • Omogućen je drugi pregled Foreign Function & Memory API-ja, koji omogućava aplikacijama interakciju sa kodom i podacima izvan Java runtimea. Novi API vam omogućava da efikasno pozivate funkcije koje nisu JVM i pristupate memoriji kojom ne upravlja JVM. Na primjer, možete pozvati funkcije iz vanjskih dijeljenih biblioteka i pristupiti procesnim podacima bez upotrebe JNI.
  • Dodana je druga eksperimentalna implementacija podudaranja uzoraka u izrazima "switch", koja omogućava korištenje fleksibilnih obrazaca u oznakama "case" umjesto tačnih vrijednosti, pokrivajući niz vrijednosti odjednom, za koje je prethodno bilo potrebno koristiti glomazni lanci izraza "ako...drugo". Objekt o = 123L; String formatted = switch (o) { case Integer i -> String.format("int %d", i); case Dugi l -> String.format("dugi %d", l); case Double d -> String.format("double %f", d); case String s -> String.format("String %s", s); default -> o.toString(); };
  • Mehanizam finalizacije i pridružene metode kao što su Object.finalize(), Enum.finalize(), Runtime.runFinalization() i System.runFinalization() su zastarjeli i bit će onemogućeni u budućem izdanju.
  • ZGC (Z Garbage Collector), SerialGC i ParallelGC sakupljači smeća podržavaju deduplikaciju reda.

izvor: opennet.ru

Dodajte komentar