Izdanje Java SE 15

Nakon šest mjeseci razvoja, Oracle pušten platforma JavaSE 15 (Java Platforma, Standard Edition 15), open-source OpenJDK projekt koristi se kao referentna implementacija. Java SE 15 održava povratnu kompatibilnost s prethodnim izdanjima Java platforme; svi prethodno napisani Java projekti radit će bez promjena kada se pokrenu pod novom verzijom. Java SE 15 spremne za instalaciju (JDK, JRE i poslužitelj JRE) pripremljeni za Linux (x86_64), Windows i macOS. Referentna implementacija razvijena u okviru projekta OpenJDK Java 15 potpuno je otvorenog koda pod licencom GPLv2, s GNU ClassPath iznimkama koje dopuštaju dinamičko povezivanje s komercijalnim proizvodima.

Java SE 15 klasificirana je kao izdanje opće podrške i nastavit će primati ažuriranja do sljedećeg izdanja. Grana dugoročne podrške (LTS) trebala bi biti Java SE 11, koja će nastaviti primati ažuriranja do 2026. Prethodna LTS grana Jave 8 bit će podržana do prosinca 2020. Sljedeće LTS izdanje zakazano je za rujan 2021. 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.

Od inovacije Java 15 može se oznaka:

  • Ugrađeni podrška za EdDSA (Edwards-Curve Digital Signature Algorithm) algoritam za stvaranje digitalnog potpisa RFC 8032). Predložena EdDSA implementacija ne ovisi o hardverskim platformama, zaštićena je od side-channel napada (osigurano je konstantno vrijeme svih izračuna) i brža je u izvedbi od postojeće ECDSA implementacije napisane u C jeziku, s istom razinom zaštite. Na primjer, EdDSA koji koristi eliptičku krivulju sa 126-bitnim ključem pokazuje slične performanse kao ECDSA sa secp256r1 eliptičkom krivuljom i 128-bitnim ključem.
  • Dodano eksperimentalna podrška za zapečaćene klase i sučelja, koja se ne mogu koristiti od strane drugih klasa i sučelja za nasljeđivanje, proširenje ili nadjačavanje implementacije. Zapečaćene klase također pružaju deklarativniji način za ograničavanje upotrebe superklase od modifikatora pristupa, temeljen na eksplicitnom popisu podklasa dopuštenih za proširenje.

    paket com.example.geometry;

    javna zapečaćena klasa Shape
    dopušta com.example.polar.Circle,
    com.example.quad.Rectangle,
    com.example.quad.simple.Square {…}

  • Dodano podrška za skrivene klase koje se ne mogu izravno koristiti putem bajt koda drugih klasa. Ključna svrha skrivenih klasa je da se koriste u okvirima koji dinamički generiraju klase tijekom izvođenja i koriste ih neizravno, kroz odraz. Takve klase obično imaju ograničeni životni ciklus, pa njihovo održavanje za pristup iz statički generiranih klasa nije opravdano i samo će dovesti do povećane potrošnje memorije. Skrivene klase također eliminiraju potrebu za nestandardnim API-jem sun.misc.Unsafe::defineAnonymousClass, koji je predviđen za uklanjanje u budućnosti.
  • ZGC (Z Garbage Collector) skupljač smeća je stabiliziran i prepoznat je kao spreman za široku upotrebu. ZGC radi u pasivnom načinu rada, minimalizira latenciju zbog skupljanja smeća što je više moguće (vrijeme zaustavljanja pri korištenju ZGC-a ne prelazi 10 ms.) i može raditi s malim i velikim hrpama, veličine od nekoliko stotina megabajta do mnogo terabajta.
  • Stabiliziran i pronađen spreman za opću upotrebu
    sakupljač smeća Shenandoah, rad s minimalnim pauzama (Low-Pause-Time Garbage Collector). Shenandoah je razvio Red Hat i poznat je po korištenju algoritma koji smanjuje vrijeme zastoja tijekom skupljanja smeća pokretanjem čišćenja paralelno s izvršavanjem Java aplikacija. Veličina kašnjenja koje uvodi sakupljač smeća je predvidljiva i ne ovisi o veličini hrpe, tj. za gomile od 200 MB i 200 GB kašnjenja će biti identična (nemoj izlaziti preko 50 ms i obično unutar 10 ms);

  • Podrška je stabilizirana i uvedena u jezik blokovi teksta - novi oblik string literala koji vam omogućuje uključivanje tekstualnih podataka s više redaka u izvorni kod bez korištenja znakova za izbjegavanje znakova i očuvanja izvornog oblikovanja teksta u bloku. Blok je uokviren s tri dvostruka navodnika.

    Na primjer, umjesto koda

    String html = " » +
    "\n\t" + " » +
    "\n\t\t" + " \"Java 1 je ovdje!\" » +
    "\n\t" + " » +
    "\n" + " ";

    možete odrediti:

    String html = """


    »Java 1\
    je ovdje!

    """;

  • Redizajniran Legacy DatagramSocket API. Stare implementacije java.net.DatagramSocket i java.net.MulticastSocket zamijenjene su modernom implementacijom koja je lakša za uklanjanje pogrešaka i održavanje, a također je kompatibilna s virtualnim tokovima razvijenim unutar projekta Razboj. U slučaju moguće nekompatibilnosti s postojećim kodom, stara implementacija nije uklonjena i može se omogućiti pomoću opcije jdk.net.usePlainDatagramSocketImpl.
  • Predložena druga eksperimentalna implementacija slaganje uzoraka u operatoru “instanceof”, koji vam omogućuje da odmah definirate lokalnu varijablu za pristup provjerenoj vrijednosti. Na primjer, možete odmah napisati “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 = (Grupa)obj;
    var unosa = group.getEntries();
    }

    Sada možete bez definicije “Grupa grupa = (Grupa) obj”:

    if (obj instanceof grupa grupe) {
    var unosa = group.getEntries();
    }

  • Predloženo druga eksperimentalna implementacija ključne riječi "zapis", koji pruža kompaktni oblik za definiranje klasa, omogućujući vam da izbjegnete eksplicitno definiranje raznih metoda niske razine kao što su equals(), hashCode() i toString() u slučajevima kada se podaci pohranjuju samo u poljima čije se ponašanje ne mijenja. Kada klasa koristi standardne implementacije metoda equals(), hashCode() i toString(), može bez njihove eksplicitne definicije:

    javna evidencija bankovne transakcije (lokalni datum datum,
    dvostruki iznos
    Opis niza) {}

    Ova će deklaracija automatski dodati implementacije metoda equals(), hashCode() i toString() uz metode konstruktora i gettera.

  • Zaprosio drugi pregled API-ja za pristup stranoj memoriji, koji Java aplikacijama omogućuje siguran i učinkovit pristup memorijskim regijama izvan Java gomile manipuliranjem novim apstrakcijama MemorySegment, MemoryAddress i MemoryLayout.
  • Onemogućeno i zastarjela tehnika optimizacije Biased Locking koja se koristi u HotSpot JVM-u kako bi se smanjilo opterećenje zaključavanja. Ova je tehnika izgubila svoju važnost na sustavima s atomskim uputama koje pružaju moderni CPU-i, a zbog svoje složenosti previše je radno intenzivna za održavanje.
  • Najavljeno zastarjeli mehanizam RMI aktivacija, koji će biti uklonjen u budućem izdanju. Napominje se da je RMI aktivacija zastarjela, potisnuta u kategoriju opcije u Javi 8 i gotovo se uopće ne koristi u modernoj praksi.
  • Izbrisano JavaScript mehanizam nosorog, koji je zastario u Javi SE 11.
  • Uklonjeno portovi za Solaris OS i SPARC procesore (Solaris/SPARC, Solaris/x64 i Linux/SPARC). Uklanjanje ovih priključaka omogućit će zajednici da ubrza razvoj novih značajki OpenJDK bez gubljenja vremena na održavanje posebnih značajki Solarisa i SPARC-a.

Izvor: opennet.ru

Dodajte komentar