Uvoľnenie Java SE 15

Po šiestich mesiacoch vývoja firma Oracle vydala platformu Java SE 15 (Java Platform, Standard Edition 15), ktorá využíva open-source projekt OpenJDK ako referenčnú implementáciu. V Java SE 15 je zachovaná spätná kompatibilita s predchádzajúcimi verziami platformy Java, všetky predtým napísané Java projekty budú fungovať bez zmien pri spustení na novej verzii. Hotové inštalovateľné zostavy Java SE 15 (JDK, JRE a Server JRE) sú pripravené pre Linux (x86_64), Windows a macOS. Referenčná implementácia vyvinutá v rámci projektu OpenJDK Java 15 je úplne otvorená pod licenciou GPLv2 s výnimkami GNU ClassPath, ktoré umožňujú dynamické spájanie s komerčnými produktmi.

Java SE 15 patrí do kategórie verzií s bežným cyklom podpory, aktualizácie pre túto verziu budú vydávané až do nasledujúcej verzie. Pre dlhodobú podporu (LTS) by sa mala používať Java SE 11, jej aktualizácie budú vydávané do roku 2026. Predchádzajúca LTS verzia Java 8 bude podporovaná do decembra 2020. Ďalší LTS release je naplánovaný na september 2021. Pripomíname, že od vydania Java 10 prešiel projekt na nový vývojový proces s kratším cyklom vytvárania nových verzií. Nové funkcie sa teraz vyvíjajú v neustále aktualizovanej master vetve, do ktorej sa začleňujú už hotové zmeny a raz za šesť mesiacov sa z nej oddeľujú vetvy na stabilizáciu nových verzií.

Z novinky Java 15 možné označiť:

  • Integrovaná podpora algoritmu vytvárania digitálneho podpisu EdDSA (Edwards-Curve Digital Signature Algorithm RFC 8032). Navrhnutá implementácia EdDSA nezávisí od hardvérových platforiem, je chránená pred útokmi z bočných kanálov (zabezpečený stály čas všetkých výpočtov) a výrazne prekonáva existujúcu implementáciu ECDSA napísanú v jazyku C pri rovnakej úrovni ochrany. Napríklad EdDSA pri použití elliptickej krivky s 126-bitovým kľúčom dosahuje výkonnosť podobnú ECDSA s elliptickou krivkou secp256r1 a 128-bitovým kľúčom.
  • Pridaná experimentálna podpora uzavretých („sealed“) tried a rozhraní, ktoré nemôžu byť používané inými triedami a rozhraniami na dedenie, rozširovanie alebo prepísanie implementácie. Uzavreté triedy tiež poskytujú viac deklaratívny spôsob obmedzenia používania nadtriedy ako prístupové modifikátory, založené na explicitnom uvedení povolených podtried na rozšírenie.

    package com.example.geometry;

    public sealed class Shape
    permits com.example.polar.Circle,
    com.example.quad.Rectangle,
    com.example.quad.simple.Square {…}

  • Pridaná podpora skrytých tried, ktoré nemôžu byť priamo použité bytecodeom iných tried. Kľúčovým účelom skrytých tried je ich využitie vo frameworkoch, ktoré dynamicky generujú triedy počas behu a používajú ich nepriamo, cez reflexiu. Takéto triedy obvykle majú obmedzený životný cyklus, preto ich zachovanie pre prístup zo staticky generovaných tried nie je odôvodnené a povedie iba k zvýšeniu spotreby pamäte. Skryté triedy tiež umožňujú vyhnúť sa neštandardnému API sun.misc.Unsafe::defineAnonymousClass, ktoré má byť v budúcnosti odstránené.
  • Bol stabilizovaný a uznaný za pripravený na široké použitie zberník odpadu ZGC (Z Garbage Collector). ZGC pracuje v pasívnom režime, čo najviac minimalizuje oneskorenia spôsobené zberom odpadu (čas zastavenia pri používaní ZGC nepresahuje 10 ms) a môže pracovať ako s malými, tak aj s obrovskými hromadami, ktorých veľkosť sa pohybuje od niekoľkých stoviek megabajtov až po mnoho terabajtov.
  • Bol stabilizovaný a uznaný za pripravený na široké použitie
    zberník odpadu Shenandoah, ktorý funguje s minimálnymi prerušením (Low-Pause-Time Garbage Collector). Shenandoah vyvinula spoločnosť Red Hat a je pozoruhodný využívaním algoritmu, ktorý znižuje čas zastavení počas zberu odpadu tým, že vykonáva čistenie paralelne s vykonávaním Java aplikácií. Veľkosť oneskorení spôsobených zberníkom odpadu je predvídateľná a nezávisí od veľkosti hromady, t.j. pre hromady 200 MB a 200 GB budú oneskorenia identické (nepresahujú 50 ms a obvykle sa zmestia do 10 ms);
  • Stabilizovaná a zavedená do jazyka podpora textových bloků — novej formy reťazcových literálov, ktorá umožňuje zahrňovať do zdrojového kódu viacriadkové textové údaje bez použitia únikov znak a zachovávajúc pôvodné formátovanie textu v bloku. Ohraničenie bloku sa realizuje tromi dvojitými úvodzovkami.

    Napríklad místo kódu

    String html = „<HTML>“ +
    „\n\t“ + „<BODY>“ +
    «\n\t\t» + «<H1>\„Java 15 je tu!\„<\/H1>» +
    „\n\t“ + „<\/BODY>“ +
    „\n“ + „<\/HTML>“;

    můžete uvést:

    String html = „“”
    <HTML>
    <BODY>
    <H1>»Java 15\
    je tady!“<\/H1>
    <\/BODY>
    <\/HTML>“””;

  • Prepracovaný API Legacy DatagramSocket. Staré implementácie java.net.DatagramSocket a java.net.MulticastSocket boli nahradené modernou implementáciou, ktorá je jednoduchšia na ladenie a údržbu, ako aj kompatibilná s virtuálnymi vláknami, ktoré sa vyvíjajú v rámci projektu Loom. V prípade možného porušenia kompatibility so súčasným kódom, pôvodná implementácia nebola odstránená a môže byť aktivovaná pomocou možnosti jdk.net.usePlainDatagramSocketImpl.
  • Bola navrhnutá druhá experimentálna implementácia porovnávanie s modelom v operátore „instanceof“, ktorý umožňuje okamžite definovať lokálnu premennú pre odkaz na overenú hodnotu. Napríklad môžete rovno napísať „if (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}“ bez explicitného definovania „String s = (String) obj“.

    Bolo:

    if (obj instanceof Group) {
    Group group = (Group) obj;
    var entries = group.getEntries();
    }

    Teraz sa môžete zaobísť bez definície „Group group = (Group) obj“:

    if (obj instanceof Group group) {
    var entries = group.getEntries();
    }

  • Navrhnuté druhá experimentálna implementácia kľúčového slova „record“, ktoré poskytuje kompaktnejšiu formu na definovanie tried, umožňujúcu sa zaobísť bez explicitného definovania rôznych nízkoúrovňových metód, ako sú equals(), hashCode() a toString(), v prípadoch, keď sú dáta uložené len v poliach, pričom správanie týchto polí sa nezmení. Keď sú v triede použité typové implementácie metód equals(), hashCode() a toString(), môžeme sa zaobísť bez ich explicitného definovania:

    public record BankTransaction(LocalDate date,
    double amount,
    String description) {}

    Tento inzerát povede k automatickému přidání implementací metod equals(), hashCode() a toString() spolu s konstruktorem a metodami, které řídí změnu dat (getter).

  • Navrhnuté druhá predbežná verzia API Foreign-Memory Access, umožňujúca Java aplikáciám bezpečne a efektívne pristupovať k oblastiam pamäte mimo Java hromady, manipulujúc novými abstrakciami MemorySegment, MemoryAddress a MemoryLayout.
  • Vypnuté a bola vyhlásená za zastaranú technika optimalizácie Biased Locking, používaná v HotSpot JVM na zníženie nákladov spôsobených zámkami. Táto technika stratila aktuálnosť na systémoch s atomickými inštrukciami poskytovanými modernými CPU a je príliš zložitá na údržbu kvôli svojej zložitosti.
  • Oznámené zastaralým mechanizmom RMI Activation, ktorý bude odstránený v niektorých z nasledujúcich vydaní. Je zaznamenané, že RMI Activation sa stal zastaraným, bol prevedený do kategórie možnosti ešte v Java 8 a takmer sa nepoužíva v súčasnej praxi.
  • Odstránené JavaScriptový engine Nashorn, ktorý bol vyhlásený za zastaraný v Java SE 11.
  • Boli odstránené porty pre operačný systém Solaris a procesory SPARC (Solaris/SPARC, Solaris/x64 a Linux/SPARC). Odstránenie uvedených portov umožní komunite urýchliť vývoj nových možností OpenJDK, bez toho, aby strácala čas na údržbu špecifických funkcií pre Solaris a SPARC.

Zdroj: opennet.ru

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster