Vydání Java SE 14

Po šesti měsících vývoje Oracle uvolněno plošina JavaSE 14 (Java Platform, Standard Edition 14), open-source projekt OpenJDK se používá jako referenční implementace. Java SE 14 si zachovává zpětnou kompatibilitu s předchozími verzemi platformy Java; všechny dříve napsané Java projekty budou po spuštění v nové verzi fungovat beze změn. Sestavení Java SE 14 připravená k instalaci (JDK, JRE a Server JRE) připravený pro Linux (x86_64), Windows a macOS. Referenční implementace vyvinutá projektem OpenJDK Java 14 je plně open source pod licencí GPLv2, s výjimkami GNU ClassPath umožňující dynamické propojení s komerčními produkty.

Java SE 14 je klasifikována jako všeobecná verze podpory a bude i nadále dostávat aktualizace až do příští verze. Pobočka Long Term Support (LTS) by měla být Java SE 11, která bude i nadále dostávat aktualizace až do roku 2026. Předchozí LTS větev Java 8 bude podporována do prosince 2020. Další vydání LTS je naplánováno na září 2021. Připomeňme, že počínaje vydáním Javy 10 přešel projekt na nový vývojový proces, což znamená kratší cyklus tvorby nových verzí. Nové funkce jsou nyní vyvíjeny v jedné neustále aktualizované hlavní větvi, která zahrnuje hotové změny a ze které se větve každých šest měsíců rozvětvují, aby se stabilizovala nová vydání.

Z inovace Java 14 jeden může značka:

  • Přidána experimentální podpora shoda vzorů v operátoru „instanceof“, který umožňuje okamžitě definovat lokální proměnnou pro přístup ke kontrolované hodnotě. Můžete například okamžitě napsat „if (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}“, aniž byste explicitně definovali „String s = (String) obj“.

    Bylo to:

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

    Nyní se můžete obejít bez definice „Skupina skupiny = (Group) obj“:

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

  • Přidána experimentální podpora pro nové klíčové slovo „záznam", který poskytuje kompaktní formu pro definování tříd, což vám umožňuje vyhnout se explicitnímu definování různých nízkoúrovňových metod, jako jsou equals(), hashCode() a toString() v případech, kdy jsou data uložena pouze v polích, jejichž chování se nemění. Když třída používá standardní implementace metod equals(), hashCode() a toString(), obejde se bez jejich explicitní definice:

    veřejný záznam BankTransaction(LocalDate date,
    dvojnásobné množství
    Popis řetězce) {}

    Tato deklarace automaticky přidá implementace metod equals(), hashCode() a toString() kromě metod konstruktoru a getteru.

  • Standardizované a standardně je povolena podpora nové formy výrazů „switch“, která nevyžaduje uvedení operátoru „break“, umožňuje kombinovat opakované štítky a lze ji použít nejen ve formě operátoru, ale také jako výraz.

    var log = switch (událost) {
    případ PLAY -> „Uživatel spustil tlačítko přehrávání“;
    případ STOP, PAUSE -> „Uživatel potřebuje přestávku“;
    výchozí -> {
    String message = event.toString();
    LocalDateTime now = LocalDateTime.now();
    výnos "Neznámá událost" + zpráva +
    » přihlášen » + nyní;
    }
    };

  • Rozšířená experimentální podpora textové bloky - nová forma řetězcových literálů, která umožňuje zahrnout víceřádková textová data do zdrojového kódu bez použití escapování a zachování původního formátování textu v bloku. Blok je orámován třemi dvojitými uvozovkami. V Javě 14 nyní textové bloky podporují escape sekvenci "\s" pro definování jedné mezery a "\" pro zřetězení s dalším řádkem (ignorování nových řádků, když potřebujete vytisknout velmi dlouhý řádek). Například místo kódu

    Řetězec html = " » +
    "\n\t" + " » +
    "\n\t\t" + " \"Java 1 je tady!\" » +
    "\n\t" + " » +
    "\n" + " ";

    můžete určit:

    Řetězec html = """


    »Java 1\
    Je zde!

    """;

  • Byl rozšířen informační obsah diagnostiky při výskytu výjimek Výjimka NullPointerException. Zatímco dříve chybová zpráva odkazovala pouze na číslo řádku, nyní podrobně popisuje, která metoda způsobila výjimku. Pokročilá diagnostika je aktuálně povolena pouze při spuštění s příznakem „-XX:+ShowCodeDetailsInExceptionMessages“. Například při zadávání tohoto příznaku výjimka v řádku

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

    výsledkem bude zpráva

    Výjimka ve vláknu "main" java.lang.NullPointerException: Nelze vyvolat "Location.getCity()"
    protože vrácená hodnota "User.getLocation()" je null
    na NullPointerExample.main(NullPointerExample.java:5):5)

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

  • Realizováno Náhled obslužného programu jpackage, který umožňuje vytvářet balíčky pro samostatné aplikace Java. Nástroj je založen na javapackager od JavaFX a umožňuje vytvářet balíčky ve formátech nativních pro různé platformy (msi a exe pro Windows, pkg a dmg pro macOS, deb a rpm pro Linux). Balíčky obsahují všechny požadované závislosti.
  • Ke sběrači odpadu G1 přidal nový mechanismus alokace paměti, který zohledňuje specifika práce na velkých systémech využívajících architekturu V. Nový alokátor paměti se aktivuje pomocí příznaku „+XX:+UseNUMA“ a může výrazně zlepšit výkon na systémech NUMA.
  • Přidat API pro on-the-fly sledování událostí JFR (JDK Flight Recorder), například pro organizování nepřetržitého sledování.
  • Přidat modul jdk.nio.mapmode, který nabízí nové režimy (READ_ONLY_SYNC, WRITE_ONLY_SYNC) pro vytváření mapovaných bajtových vyrovnávacích pamětí (MappedByteBuffer) odkazujících na energeticky nezávislou paměť (NVM).
  • Realizováno Náhled rozhraní Foreign-Memory Access API, které umožňuje aplikacím Java bezpečně a efektivně přistupovat k oblastem paměti mimo haldu Java manipulací s novými abstrakcemi MemorySegment, MemoryAddress a MemoryLayout.
  • Oznámeno zastaralé porty pro Solaris OS a procesory SPARC (Solaris/SPARC, Solaris/x64 a Linux/SPARC) se záměrem tyto porty v budoucnu odstranit. Ukončení podpory těchto portů umožní komunitě urychlit vývoj nových funkcí OpenJDK, aniž by ztrácel čas údržbou funkcí specifických pro Solaris a SPARC.
  • Smazáno sběrač odpadu CMS (Concurrent Mark Sweep), který byl před dvěma lety označen jako zastaralý a zůstal neudržovaný (CMS byl dávno nahrazen sběračem odpadu G1). Kromě, oznámil zamítl používání kombinace algoritmů ParallelScavenge a SerialOld (spouštěno s volbami „-XX:+UseParallelGC -XX:-UseParallelOldGC“).
  • Experimentální podpora pro sběrač odpadků ZGC (Z Garbage Collector) byla poskytnuta na platformách macOS a Windows (dříve podporováno pouze na Linuxu). ZGC pracuje v pasivním režimu, maximálně minimalizuje latenci způsobenou shromažďováním odpadků (doba zastavení při použití ZGC nepřesahuje 10 ms.) a může pracovat s malými i velkými hromadami o velikosti od několika stovek megabajtů po mnoho terabajtů.
  • Odebráno Toolkit a API pro kompresi souborů JAR pomocí algoritmu Pack200.

Zdroj: opennet.ru

Přidat komentář