Vydání Java SE 15

Po šesti měsících vývoje Oracle uvolněno plošina JavaSE 15 (Java Platform, Standard Edition 15), open-source projekt OpenJDK se používá jako referenční implementace. Java SE 15 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 15 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 15 je plně open source pod licencí GPLv2, s výjimkami GNU ClassPath umožňující dynamické propojení s komerčními produkty.

Java SE 15 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 15 jeden může značka:

  • Vestavěný podpora pro algoritmus vytváření digitálního podpisu EdDSA (Edwards-Curve Digital Signature Algorithm) RFC 8032). Navrhovaná implementace EdDSA nezávisí na hardwarových platformách, je chráněna před útoky postranním kanálem (je zajištěna konstantní doba všech výpočtů) a je výkonově rychlejší než stávající implementace ECDSA napsaná v jazyce C, se stejnou úrovní ochrany. Například EdDSA používající eliptickou křivku se 126bitovým klíčem vykazuje podobný výkon jako ECDSA s eliptickou křivkou secp256r1 a 128bitovým klíčem.
  • Přidal experimentální podpora uzavřených tříd a rozhraní, které nemohou být použity jinými třídami a rozhraními ke zdědění, rozšíření nebo přepsání implementace. Zapečetěné třídy také poskytují deklarativnější způsob, jak omezit použití nadtřídy než modifikátory přístupu, na základě explicitního výpisu podtříd povolených pro rozšíření.

    balíček com.example.geometrie;

    veřejná zapečetěná třída Shape
    povoluje com.example.polar.Circle,
    com.example.quad.Rectangle,
    com.example.quad.simple.Square {…}

  • Přidal podpora skrytých tříd, které nelze přímo použít bajtovým kódem jiných tříd. Hlavním účelem skrytých tříd je použití v rámcích, které dynamicky generují třídy za běhu a používají je nepřímo, prostřednictvím reflexe. Takové třídy mají obvykle omezený životní cyklus, takže jejich udržování pro přístup ze staticky generovaných tříd není opodstatněné a povede pouze ke zvýšené spotřebě paměti. Skryté třídy také eliminují potřebu nestandardního API sun.misc.Unsafe::defineAnonymousClass, které bude v budoucnu odstraněno.
  • Odpadkový koš ZGC (Z Garbage Collector) byl stabilizován a je uznán jako připravený k širokému použití. 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ů.
  • Stabilizované a připravené k obecnému použití
    Popelář Shenandoah, pracující s minimálními pauzami (Low-Pause-Time Garbage Collector). Shenandoah byl vyvinut společností Red Hat a je pozoruhodný tím, že používá algoritmus, který zkracuje dobu zastavení během shromažďování odpadu tím, že spouští čištění souběžně s prováděním aplikací Java. Velikost zpoždění zaváděných sběračem odpadu je předvídatelná a nezávisí na velikosti haldy, tzn. pro hromady 200 MB a 200 GB budou zpoždění stejná (nechoď ven více než 50 ms a obvykle do 10 ms);

  • Podpora byla stabilizována a zavedena do jazyka 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.

    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!

    """;

  • Předělaný Starší rozhraní API DatagramSocket. Staré implementace java.net.DatagramSocket a java.net.MulticastSocket byly nahrazeny moderní implementací, která se snadněji ladí a udržuje a je také kompatibilní s virtuálními streamy vyvinutými v rámci projektu. Tkalcovský stav. V případě možné nekompatibility se stávajícím kódem nebyla stará implementace odstraněna a lze ji povolit pomocí možnosti jdk.net.usePlainDatagramSocketImpl.
  • Druhá navržená experimentální implementace 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();
    }

  • Navrženo druhá experimentální implementace klíčového slova "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.

  • Navrženo druhý 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.
  • Zakázáno a zavrhli optimalizační techniku ​​Biased Locking používanou v HotSpot JVM ke snížení režie zamykání. Tato technika ztratila svůj význam na systémech s atomickými instrukcemi poskytovanými moderními CPU a je příliš pracná na údržbu kvůli své složitosti.
  • Oznámeno zastaralý mechanismus Aktivace RMI, která bude odstraněna v budoucí verzi. Je třeba poznamenat, že aktivace RMI je zastaralá, zařazena do kategorie možností v Javě 8 a v moderní praxi se téměř nikdy nepoužívá.
  • Smazáno JavaScript engine rhino, která byla v Java SE 11 zastaralá.
  • Odebráno porty pro Solaris OS a procesory SPARC (Solaris/SPARC, Solaris/x64 a Linux/SPARC). Odstranění těchto portů umožní komunitě urychlit vývoj nových funkcí OpenJDK, aniž by ztráceli čas údržbou specifických funkcí Solaris a SPARC.

Zdroj: opennet.ru

Přidat komentář