Nakon šest mjeseci razvoja, tvrtka Oracle platformu (Java Platform, Standard Edition 15), čija je referentna implementacija otvoreni projekt OpenJDK. U Java SE 15 zadržana je unazad kompatibilnost s prethodnim izdanjima platforme Java, svi prethodno napisani Java projekti će raditi bez izmjena na novoj verziji. Dostupne su verzije Java SE 15 (JDK, JRE i Server JRE) za instalaciju. za Linux (x86_64), Windows i macOS. Referentna implementacija razvijena u okviru projekta OpenJDK je potpuno otvorena pod GPLv2 licencom s iznimkama GNU ClassPath, koje omogućuju dinamičko povezivanje s komercijalnim proizvodima.
Java SE 15 spada u kategoriju izdanja s redovnom podrškom, a ažuriranja će se izdavati do sljedeće verzije. Kao verziju s dugotrajnom podrškom (LTS) treba koristiti Java SE 11, čija će se ažuriranja izdavati do 2026. godine. Prošla LTS verzija Java 8 podržavat će se do prosinca 2020. godine. Sljedeće LTS izdanje planirano je za rujan 2021. godine. Podsjećamo, od izdanja Java 10 projekt je prešao na novi proces razvoja, koji obuhvaća kraći ciklus izdavanja novih verzija. Nova funkcionalnost sada se razvija u jednoj neprekidno ažuriranoj master grani, u koju se uključuju već gotove promjene i od koje se svaka šest mjeseci odvaja grana za stabilizaciju novih izdanja.
Od :
- podrška za algoritam digitalnog potpisivanja EdDSA (Edwards-Curve Digital Signature Algorithm ). Predložena implementacija EdDSA ne ovisi o hardverskim platformama, zaštićena je od napada putem bočnih kanala (osiguravajući konstantno vrijeme svih izračuna) i po performansama je superiornija od postojeće ECDSA implementacije napisane u programskom jeziku C, uz istu razinu zaštite. Na primjer, EdDSA pri korištenju eliptične krivulje sa 126-bitnim ključem pokazuje performanse slične ECDSA s eliptičnom krivuljom secp256r1 i 128-bitnim ključem.
- eksperimentalna podrška za pečatne ('sealed') klase i sučelja koja se ne mogu koristiti od drugih klasa i sučelja za nasljeđivanje, proširenje ili prebrisavanje implementacije. Pečatne klase također pružaju deklarativniji način ograničavanja korištenja superklase od modifikatora pristupa, temeljenog na eksplicitnom nabrajanju podklasa dopuštenih za proširenje.
package com.example.geometry;
public sealed class Shape
permits com.example.polar.Circle,
com.example.quad.Rectangle,
com.example.quad.simple.Square {…} - podrška za skrivene klase koje se ne mogu direktno koristiti od strane bajtkoda drugih klasa. Ključna svrha skrivenih klasa je korištenje u okvirima koji dinamički generiraju klase za vrijeme izvođenja i koriste ih neizravno, kroz . Takve klase obično imaju ograničen životni ciklus, pa njihovo održavanje za pristup iz statički generiranih klasa nije opravdano i dovest će samo do povećane potrošnje memorije. Skrivene klase također omogućuju izbjegavanje korištenja nestandardnog API-ja sun.misc.Unsafe::defineAnonymousClass, koji je predviđen za uklanjanje u budućnosti.
- Stabiliziran je i proglašen spremnim za široku upotrebu sakupljač smeća ZGC (Z Garbage Collector). ZGC radi u pasivnom režimu, koliko je to moguće, minimizira kašnjenja zbog sakupljanja smeća (vrijeme stopa prilikom korištenja ZGC ne prelazi 10 ms) i može raditi kako s malim, tako i s ogromnim hrpama, veličine od nekoliko stotina megabajta do nekoliko terabajta.
- Stabiliziran je i proglašen spremnim za široku upotrebu
sakupljač smeća , koji radi s minimalnim pauzama (Low-Pause-Time Garbage Collector). Shenandoah je razvijen od strane Red Hata i karakterizira ga korištenje algoritma koji smanjuje vrijeme pauza tijekom sakupljanja smeća provodeći čišćenje paralelno s izvođenjem Java aplikacija. Veličina kašnjenja koja nastaje uslijed rada sakupljača smeća je predvidiva i ne ovisi o veličini hrpe, tj. za hrpe od 200 MB i 200 GB, kašnjenja će biti identična ( 50 ms i obično se uklapaju u 10 ms); - Stabilizirana je i uvedena podrška za jezik — novu formu string literala, koja omogućava uključivanje višelinijskih tekstualnih podataka u izvorni kod bez potrebe za ekvivalentnim simbolima i zadržavanjem izvorne formacije teksta u bloku. Okviranje bloka vrši se sa tri dvostruka navodnika.
Na primjer, umjesto koda
String html = „<HTML>” +
„\n\t” + „<BODY>” +
«\n\t\t» + «„Java 15 je ovdje!“
» +
„\n\t” + „</BODY>” +
„\n” + „</HTML>”;može se napisati:
String html = „"""
„<HTML>”
„<BODY>”„Java 15
je ovdje!"</H1>”
„</BODY>”
„</HTML>”"""; - API Legacy DatagramSocket. Stare implementacije java.net.DatagramSocket i java.net.MulticastSocket, zamijenjene su modernom implementacijom, jednostavnijom za otklanjanje grešaka i održavanje, kao i kompatibilnom s virtualnim vlaknima koja se razvijaju u okviru projekta . U slučaju mogućeg kršenja kompatibilnosti sa postojećim kodom, stara implementacija nije uklonjena i može se aktivirati pomoću opcije jdk.net.usePlainDatagramSocketImpl.
- Predložena je druga eksperimentalna implementacija u operatoru «instanceof», koja omogućuje trenutno određivanje lokalne varijable za referenciranje na provjerenu vrijednost. Na primjer, možete pisati «if (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}» bez eksplicitnog definiranja «String s = (String) obj».
Bilo je:
if (obj instanceof Group) {
Group group = (Group) obj;
var entries = group.getEntries();
}Sada se možete osloboditi od definicije «Group group = (Group) obj»:
if (obj instanceof Group group) {
var entries = group.getEntries();
} - druga eksperimentalna implementacija ključne riječi ««, koja pruža kompaktni oblik za definiranje klasa, omogućujući izbjegavanje eksplicitnog definiranja raznih niskonivoa metoda kao što su equals(), hashCode() i toString() u slučajevima kada se podaci samo pohranjuju u poljima čije se ponašanje ne mijenja. Kada se u klasi koriste tipične implementacije metoda equals(), hashCode() i toString(), može se izbjeći njihovo eksplicitno definiranje:
public record BankTransaction(LocalDate date,
double amount,
String description) {}Ova izjava omogućit će automatsko dodavanje implementacija metoda equals(), hashCode() i toString(), uz konstruktor i metode koje kontroliraju promjenu podataka (getter).
- druga preliminarna verzija API-ja Foreign-Memory Access, koja omogućava Java aplikacijama sigurnu i efikasnu uporabu područja memorije izvan Java hrpe, manipulirajući novim apstrakcijama MemorySegment, MemoryAddress i MemoryLayout.
- i proglašena je zastarjelom tehnika optimizacije Biased Locking, koja se koristila u HotSpot JVM za smanjenje troškova uzrokovanih zaključavanjima. Ova tehnika je izgubila relevantnost na sustavima sa atomske instrukcije koje pružaju moderni CPU-i, a previše je zahtjevna za održavanje zbog svoje složenosti.
- zastarjelim mehanizam , koji će biti uklonjen u jednom od sljedećih izdanja. Napominje se da je RMI Activation postao zastario, prebačen u skup opcija još u Java 8 i gotovo se ne koristi u modernoj praksi.
- JavaScript motor , koji je proglašen zastarjelim u Java SE 11.
- portovi za OS Solaris i procesore SPARC (Solaris/SPARC, Solaris/x64 i Linux/SPARC). Uklanjanje navedenih portova omogućit će zajednici da ubrza razvoj novih mogućnosti OpenJDK-a, ne trošeći vrijeme na održavanje karakteristika specifičnih za Solaris i SPARC.
Izvor: opennet.ru
