Vydanie Java SE 14

Po šiestich mesiacoch vývoja firma Oracle vydala platformu Java SE 14 (Java Platform, Standard Edition 14), ktorej referenčná implementácia je založená na otvorenom projekte OpenJDK. Java SE 14 zachováva spätnú kompatibilitu s predchádzajúcimi verziami platformy Java, všetky predtým napísané projekty Java budú fungovať bez zmien na novej verzii. Pripravené na inštaláciu zostavy Java SE 14 (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 14 je úplne otvorená pod licenciou GPLv2 s výnimkami GNU ClassPath, ktoré umožňujú dynamické spájanie s komerčnými produktmi.

Java SE 14 patrí do kategórie vydaní s bežnou dobou podpory, aktualizácie pre ktoré budú vydávané do ďalšieho vydania. Pre dlhodobú podporu (LTS) sa odporúča použiť Java SE 11, aktualizácie pre ktoré budú vydávané do roku 2026. Predchádzajúca LTS vetva Java 8 bude podporovaná do decembra 2020. Ďalšie LTS vydanie je naplánované na september 2021. Pripomíname, že od vydania Java 10 prešiel projekt na nový vývojový proces, ktorý predpokladá kratší cyklus uvoľňovania nových verzií. Nové funkcie sa teraz vyvíjajú v jednej neustále aktualizovanej master vetve, do ktorej sú zahrnuté hotové zmeny a od ktorej sú každých šesť mesiacov odvetvené stabilizačné vetvy pre nové vydania.

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

  • Bola pridaná experimentálna podpora 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();
    }

  • Bola pridaná experimentálna podpora nového 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).

  • Standardizovaná a je ve výchozím nastavení zahrnuta podpora nové formy výrazů „switch“, která nevyžaduje uvedení příkazu „break“, což umožňuje slučovat opakující se štítky a dovoluje použití nejen ve tvaru příkazu, ale i jako výrazu.

    var log = switch (event) {
    case PLAY -> „Uživatel aktivoval tlačítko přehrávání“;
    case STOP, PAUSE -> „Uživatel potřebuje přestávku“;
    default -> {
    String message = event.toString();
    LocalDateTime now = LocalDateTime.now();
    yield „Neznámá událost „ + message +
    „ zaznamenána dne „ + now;
    }
    };

  • Rozšířena experimentální podpora textových bloků — nové formy řetězcových literálů, které umožňují zahrnout do zdrojového kódu vícerozměrná textová data bez použití escape znaků a zachovávají původní formátování textu v bloku. Ohraničení bloku se provádí třemi dvojitými uvozovkami. V Javě 14 byla podpora escape sekvencí „\s“ pro definování jednoho mezery a „\“ pro spojení s následující řádkou (ignorování nového řádku, když je potřeba vypsat velmi dlouhý řetězec) implementována v textových blocích. Například místo kódu

    String html = „<HTML>“ +
    „\n\t“ + „<BODY>“ +
    „\n\t\t“ + „<H1>\„Java 14 je tady!\„<\/H1>“ +
    „\n\t“ + „<\/BODY>“ +
    „\n“ + „<\/HTML>“;

    můžete uvést:

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

  • Rozšířena informativnost diagnostiky při vzniku výjimek NullPointerException. Pokud dříve zpráva o chybě odkazovala pouze na číslo řádku, nyní je v ní podrobně uvedeno, který z metod vyvolal výjimku. Rozšířená diagnostika se zatím zapíná pouze při spuštění s příznakem „-XX:+ShowCodeDetailsInExceptionMessages“. Například při uvedení tohoto příznaku výjimka na řádku

    var name = user.getLocation().getCity().getName();

    vyústí ve zprávu:

    Exception in thread „main“ java.lang.NullPointerException: Cannot invoke „Location.getCity()“
    because the return value of „User.getLocation()“ is null
    at NullPointerExample.main(NullPointerExample.java:5):5)

    což umožňuje pochopit, že metoda Location.getCity() nebyla volána, a User.getLocation() vrátil hodnotu null.

  • Implementované predbežná verzia nástroja jpackage, ktorý umožňuje vytvárať balíčky pre samostatné (self-contained) Java aplikácie. Nástroj je založený na javapackager z JavaFX a umožňuje vytvárať balíčky vo formátoch typických pre rôzne platformy (msi a exe pre Windows, pkg a dmg pre macOS, deb a rpm pre Linux). Balíčky obsahujú všetky potrebné závislosti.
  • Zberač odpadu G1 bol pridaný nový mechanizmus distribúcie pamäte, ktorý zohľadňuje špecifiká práce na veľkých systémoch s architektúrou NUMA. Nový distribútor pamäte sa aktivuje pomocou voľby „+XX:+UseNUMA“ a umožňuje výrazne zvýšiť výkon na NUMA systémoch.
  • Pridané API na sledovanie udalostí JFR (JDK Flight Recorder) v reálnom čase, napríklad na organizáciu nepretržitého monitorovania.
  • Pridané modul jdk.nio.mapmode, ktorý ponúka nové režimy (READ_ONLY_SYNC, WRITE_ONLY_SYNC) na vytváranie mapovaných bajtových bufferov (MappedByteBuffer), odkazujúcich na nevolatilnú pamäť (NVM).
  • Implementované predbežná verzia API Foreign-Memory Access, ktorá umožňuje Java aplikáciám bezpečne a efektívne pristupovať k oblastiam pamäte mimo Java hromadu, manipulujúc s novými abstrakciami MemorySegment, MemoryAddress a MemoryLayout.
  • Vyhlásené zastaralé porty pre OS Solaris a procesory SPARC (Solaris/SPARC, Solaris/x64 a Linux/SPARC) s úmyslom odstrániť tieto porty v budúcnosti. Prevedenie uvedených portov do stavu zastarania umožní komunite urýchliť vývoj nových funkcií OpenJDK, aniž by strácala čas na údržbu vlastností špecifických pre Solaris a SPARC.
  • Odstránené zberač odpadu CMS (Concurrent Mark Sweep), ktorý bol pred dvoma rokmi označený ako zastaraný a zostal bez podpory (nahradili ho dávno zberače odpadu G1). Navyše, vyhlásené zastaralé je aj použitie kombinácie algoritmov zberu odpadu ParallelScavenge a SerialOld (spustenie s možnosťami „-XX:+UseParallelGC -XX:-UseParallelOldGC“).
  • Bola zabezpečená experimentálna podpora zberača odpadu ZGC (Z Garbage Collector) na platformách macOS a Windows (predtým bol podporovaný len v Linuxe). ZGC pracuje v pasívnom režime, ktorý do maximálnej miery minimalizuje oneskorenia spôsobené zberom odpadu (čas zastavenia pri používaní ZGC nepresahuje 10 ms) a môže fungovať s malými aj obrovskými hromadami, s veľkosťou od niekoľkých stoviek megabajtov po niekoľko terabajtov.
  • Boli odstránené nástroje a API na kompresiu JAR súborov pomocou algoritmu Pack200.

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