Vydanie Java SE 16

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

Java SE 16 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. Ď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.

V rámci prípravy na nové vydanie sa vývoj presunul zo systému riadenia verzií Mercurial na Git a platformu spoločného vývoja GitHub. Očakáva sa, že migrácia zlepší výkon operácií úložiska, zvýši efektivitu úložiska, poskytne prístup k zmenám v celej histórii projektu, zlepší podporu pre kontrolu kódu a umožní rozhraniam API automatizovať pracovné postupy. Okrem toho použitie Git a GitHub robí projekt atraktívnejším pre začiatočníkov a vývojárov zvyknutých na Git.

Nové funkcie v Java 16 zahŕňajú:

  • Pridaný experimentálny modul jdk.incubator.vector s implementáciou Vector API, ktorý poskytuje funkcie pre vektorové výpočty, ktoré sa vykonávajú pomocou vektorových inštrukcií na procesoroch x86_64 a AArch64 a umožňujú súčasné aplikácie operácií na viacero hodnôt (SIMD). Na rozdiel od možností, ktoré poskytuje kompilátor HotSpot JIT pre automatickú vektorizáciu skalárnych operácií, nové API vám umožňuje explicitne riadiť vektorizáciu pre paralelné spracovanie údajov.
  • Kód JDK a VM HotSpot napísaný v C++ môže používať funkcie uvedené v špecifikácii C++14. Predtým boli povolené štandardy C++98/03.
  • ZGC (Z Garbage Collector), ktorý pracuje v pasívnom režime a čo najviac minimalizuje oneskorenia spôsobené zberom odpadu, pridal možnosť spracovávať zásobníky vlákien paralelne bez pozastavenia aplikačných vlákien. ZGC má teraz iba prácu, ktorá vyžaduje pozastavenie, ktoré má neustále oneskorenia, zvyčajne nepresahujúce niekoľko stoviek mikrosekúnd.
  • Pridaná podpora pre Unix sockety (AF_UNIX) do tried SocketChannel, ServerSocketChannel a java.nio.channels.
  • Pre linuxovú distribúciu Alpine bol implementovaný port so štandardnou knižnicou C musl, ktorá je populárna v prostrediach pre kontajnery, mikroslužby, cloud a embedded systémy. Navrhovaný port v takýchto prostrediach vám umožňuje spúšťať programy Java ako bežné aplikácie. Okrem toho pomocou jlink môžete odstrániť všetky nepoužívané moduly a vytvoriť minimálne prostredie dostatočné na spustenie aplikácie, čo vám umožní vytvárať kompaktné obrázky špecifické pre aplikáciu.
  • Bol implementovaný mechanizmus elastického metapriestoru, ktorý optimalizuje operácie prideľovania a vracania pamäte obsadenej metadátami triedy (metapriestor) v JVM HotSpot. Použitie Elastic Metaspace znižuje fragmentáciu pamäte, znižuje réžiu zavádzača tried a má tiež priaznivý vplyv na výkon dlho bežiacich serverových aplikácií vďaka rýchlejšiemu návratu pamäte obsadenej nevyužitými metaúdajmi triedy do operačného systému. Na výber režimu uvoľnenia pamäte po uvoľnení tried sa ponúka voľba „-XX:MetaspaceReclaimPolicy=(balanced|aggressive|none)“.
  • Pre systémy Windows bežiace na hardvéri s procesormi založenými na architektúre AArch64 bol pridaný port JDK.
  • Bola navrhnutá tretia 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.
  • Bolo implementované experimentálne rozhranie Foreign Linker API, ktoré poskytuje prístup z jazyka Java k natívnemu kódu. Spolu s rozhraním Foreign-Memory API umožňuje nové programovacie rozhranie oveľa jednoduchšie vytvárať obaly nad konvenčnými zdieľanými knižnicami.
  • Pridaný nástroj jpackage, ktorý vám umožňuje vytvárať balíky pre samostatné aplikácie Java. Pomôcka je založená na javapackager od JavaFX a umožňuje vytvárať balíčky vo formátoch natívnych pre rôzne platformy (msi a exe pre Windows, pkg a dmg pre macOS, deb a rpm pre Linux). Balíky obsahujú všetky požadované závislosti.
  • Prísne zapuzdrenie všetkých vnútorných častí JDK je štandardne povolené, s výnimkou kritických rozhraní API, ako je sun.misc.Unsafe. Hodnota možnosti „--ilegal-access“ je teraz štandardne nastavená na „deny“ namiesto „permit“, čo blokuje pokusy kódu o prístup k väčšine interných tried, metód a polí. Ak chcete obísť obmedzenie, použite možnosť „-ilegal-access=permit“.
  • Implementácia zhody vzorov v operátori „instanceof“ bola stabilizovaná, čo vám umožňuje okamžite definovať lokálnu premennú, ktorá sa bude vzťahovať na kontrolovanú hodnotu. 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“. Was: if (obj instanceof Group) { Group group = (Group) obj; var entries = group.getEntries(); } Teraz sa môžete zaobísť bez definovania “Skupina skupiny = (Skupina) obj”: if (obj instanceof Group group) { var entries = group.getEntries(); }
  • Implementácia kľúčového slova „record“ bola stabilizovaná a poskytuje kompaktnú formu pre definície tried, ktorá eliminuje potrebu explicitne definovať rôzne nízkoúrovňové metódy, ako napríklad equals(), hashCode() a toString() v prípadoch, keď sa ukladajú dáta. len v poliach.s ktorými sa nemení. Keď trieda používa štandardné implementácie metód equals(), hashCode() a toString(), môže sa zaobísť bez ich explicitnej definície: verejný záznam BankTransaction(LocalDate date, double number, String description) {}

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

  • Druhý návrh je navrhnutý pre zapečatené triedy a rozhrania, ktoré nemôžu byť použité inými triedami a rozhraniami na dedenie, rozširovanie alebo prepisovanie implementácií. 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á uzavretá trieda Tvar umožňuje com.example.polar.Circle, com.example.quad.Rectangle, com.example.quad.jednoduchý.štvorec {…}

Zdroj: opennet.ru

Pridať komentár