Vydanie Java SE 15

Po šiestich mesiacoch vývoja Oracle uvoľnený plošina JavaSE 15 (Java Platform, Standard Edition 15) sa ako referenčná implementácia používa open-source projekt OpenJDK. Java SE 15 si zachováva spätnú kompatibilitu s predchádzajúcimi vydaniami platformy Java; všetky predtým napísané projekty Java budú pri spustení v novej verzii fungovať bez zmien. Zostavy Java SE 15 pripravené na inštaláciu (JDK, JRE a Server JRE) pripravené pre Linux (x86_64), Windows a macOS. Referenčná implementácia vyvinutá projektom OpenJDK Java 15 je plne open source pod licenciou GPLv2, s výnimkami GNU ClassPath, ktoré umožňujú dynamické prepojenie s komerčnými produktmi.

Java SE 15 je klasifikovaná ako všeobecná podporná verzia a bude naďalej dostávať aktualizácie až do ďalšieho vydania. Pobočka Long Term Support (LTS) by mala byť Java SE 11, ktorá bude naďalej dostávať aktualizácie až do roku 2026. Predchádzajúca LTS vetva Java 8 bude podporovaná do decembra 2020. Ďalšie vydanie LTS je naplánované na september 2021. Pripomeňme, že počnúc vydaním Java 10 projekt prešiel na nový vývojový proces, čo znamená kratší cyklus tvorby nových vydaní. Nová funkcionalita sa teraz vyvíja v jednej neustále aktualizovanej hlavnej vetve, ktorá zahŕňa hotové zmeny a z ktorej sa vetvy rozvetvujú každých šesť mesiacov, aby sa stabilizovali nové vydania.

Z inovácie Java 15 jeden môže značka:

  • Vstavaný podpora pre algoritmus vytvárania digitálneho podpisu EdDSA (Edwards-Curve Digital Signature Algorithm) RFC 8032). Navrhovaná implementácia EdDSA nezávisí od hardvérových platforiem, je chránená pred útokmi z postranných kanálov (je zabezpečený konštantný čas všetkých výpočtov) a je výkonnejšia ako existujúca implementácia ECDSA napísaná v jazyku C s rovnakou úrovňou ochrany. Napríklad EdDSA používajúce eliptickú krivku so 126-bitovým kľúčom vykazuje podobný výkon ako ECDSA s eliptickou krivkou secp256r1 a 128-bitovým kľúčom.
  • Pridané experimentálna podpora pre zapečatené triedy a rozhrania, ktoré nemôžu byť použité inými triedami a rozhraniami na zdedenie, rozšírenie alebo prepísanie implementácie. Zapečatené triedy tiež poskytujú deklaratívnejší spôsob, ako obmedziť použitie nadtriedy ako modifikátory prístupu, na základe explicitného zoznamu podtried, ktoré sú povolené pre rozšírenie.

    balík com.example.geometria;

    verejná zapečatená trieda Tvar
    povoľuje com.example.polar.Circle,
    com.example.quad.Rectangle,
    com.example.quad.simple.Square {…}

  • Pridané podpora skrytých tried, ktoré nemožno priamo použiť bajtovým kódom iných tried. Kľúčovým účelom skrytých tried je použitie v rámcoch, ktoré dynamicky generujú triedy za behu a používajú ich nepriamo, prostredníctvom odraz. Takéto triedy majú zvyčajne obmedzený životný cyklus, takže ich udržiavanie pre prístup zo staticky generovaných tried nie je opodstatnené a povedie to len k zvýšeniu spotreby pamäte. Skryté triedy tiež eliminujú potrebu neštandardného API sun.misc.Unsafe::defineAnonymousClass, ktoré sa v budúcnosti plánuje odstrániť.
  • ZGC (Z Garbage Collector) zberač odpadkov bol stabilizovaný a je uznaný ako pripravený na široké použitie. ZGC pracuje v pasívnom režime, čo najviac minimalizuje latenciu kvôli garbage collection (čas zastavenia pri použití ZGC nepresahuje 10 ms.) a dokáže pracovať s malými aj obrovskými haldami, ktorých veľkosť sa pohybuje od niekoľkých stoviek megabajtov až po mnoho terabajtov.
  • Stabilizované a pripravené na všeobecné použitie
    smetiar Shenandoah, pracujúci s minimálnymi prestávkami (Low-Pause-Time Garbage Collector). Shenandoah bol vyvinutý spoločnosťou Red Hat a je pozoruhodný tým, že používa algoritmus, ktorý znižuje čas zastavenia počas zberu odpadu spustením čistenia súbežne s vykonávaním aplikácií Java. Veľkosť oneskorení zavedených zberačom odpadu je predvídateľná a nezávisí od veľkosti haldy, t.j. pre hromady 200 MB a 200 GB budú oneskorenia rovnaké (nechoď von viac ako 50 ms a zvyčajne do 10 ms);

  • Podpora bola stabilizovaná a zavedená do jazyka textové bloky — nová forma reťazcových literálov, ktorá umožňuje zahrnúť viacriadkové textové údaje do zdrojového kódu bez použitia znakového escapovania a zachovania pôvodného formátovania textu v bloku. Blok je orámovaný tromi dvojitými úvodzovkami.

    Napríklad namiesto kódu

    Reťazec html = " » +
    "\n\t" + " » +
    "\n\t\t" + " \"Java 1 je tu!\" » +
    "\n\t" + " » +
    "\n" + " ";

    môžete špecifikovať:

    Reťazec html = """


    »Java 1\
    Je tu!

    """;

  • Prerobený Staršie rozhranie API DatagramSocket. Staré implementácie java.net.DatagramSocket a java.net.MulticastSocket boli nahradené modernou implementáciou, ktorá sa ľahšie ladí a udržiava a je tiež kompatibilná s virtuálnymi streammi vyvinutými v rámci projektu. tkáčsky stav. V prípade možnej nekompatibility s existujúcim kódom nebola stará implementácia odstránená a možno ju povoliť pomocou možnosti jdk.net.usePlainDatagramSocketImpl.
  • Navrhovaná druhá experimentálna implementácia zhoda vzorov v operátori „instanceof“, ktorý umožňuje okamžite definovať lokálnu premennú pre prístup ku kontrolovanej hodnote. Môžete napríklad okamžite napísať „if (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}“ bez toho, aby ste explicitne definovali „String s = (String) obj“.

    To bolo:

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

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

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

  • Navrhované druhá experimentálna implementácia kľúčového slova "záznam“, ktorý poskytuje kompaktnú formu na definovanie tried, čo vám umožňuje vyhnúť sa explicitnému definovaniu rôznych nízkoúrovňových metód, ako sú equals(), hashCode() a toString() v prípadoch, keď sú údaje uložené iba v poliach, ktorých správanie sa nemení. Keď trieda používa štandardné implementácie metód equals(), hashCode() a toString(), zaobíde sa bez ich explicitnej definície:

    verejný záznam BankTransaction(LocalDate date,
    dvojnásobné množstvo
    Popis reťazca) {}

    Táto deklarácia automaticky pridá implementácie metód equals(), hashCode() a toString() okrem metód konštruktora a získavania.

  • Navrhnuté druhá ukážka rozhrania Foreign-Memory Access API, ktorá umožňuje aplikáciám Java bezpečne a efektívne pristupovať k pamäťovým oblastiam mimo haldy Java manipuláciou s novými abstrakciami MemorySegment, MemoryAddress a MemoryLayout.
  • Zakázané a zavrhli optimalizačnú techniku ​​Biased Locking používanú v HotSpot JVM na zníženie réžie uzamykania. Táto technika stratila svoj význam v systémoch s atómovými pokynmi poskytovanými modernými CPU a je príliš náročná na prácu kvôli jej zložitosti.
  • Vyhlásené zastaraný mechanizmus Aktivácia RMI, ktorý bude odstránený v budúcom vydaní. Je potrebné poznamenať, že aktivácia RMI je zastaraná, zaradená do kategórie možností v jazyku Java 8 a v modernej praxi sa takmer nikdy nepoužíva.
  • Odstránené JavaScript engine rhino, ktorej podpora bola v Java SE 11 zastaraná.
  • Odstránený porty pre OS Solaris a procesory SPARC (Solaris/SPARC, Solaris/x64 a Linux/SPARC). Odstránenie týchto portov umožní komunite urýchliť vývoj nových funkcií OpenJDK bez plytvania časom udržiavaním funkcií špecifických pre Solaris a SPARC.

Zdroj: opennet.ru

Pridať komentár