Programovanie

JDK 15: Nové funkcie v prostredí Java 15

Java Development Kit 15, implementácia Oracle pre ďalšiu verziu Java SE (Standard Edition), bude k dispozícii ako produkčné vydanie dnes, 15. septembra 2020. Medzi najdôležitejšie prvky JDK 15 patria textové bloky, skryté triedy, API pre prístup do cudzej pamäte, Z Garbage Collector a ukážky zapečatených tried, porovnávanie vzorov a záznamy.

JDK 15 je iba krátkodobé vydanie, ktoré bude s podporou Oracle Premier Support podporované iba šesť mesiacov, kým JDK 16 nepríde budúci marec. JDK 17, ďalšie vydanie dlhodobej podpory, ktoré bude spoločnosť Oracle podporovať osem rokov, má prísť o rok, podľa kadencie Oracle na šesťmesačné vydanie pre verzie Java SE.

Vývojári sa teraz môžu pozrieť na JDK 15, aby získali predstavu o tom, čo bude v JDK 17, uviedol Georges Saab, prezident spoločnosti Java Platform Group spoločnosti Oracle. Aktuálne vydanie LTS je JDK 11, ktoré dorazilo v septembri 2018. Vydania LTS prichádzajú každé tri roky. JDK 15 nadväzuje na JDK 14, ktorý bol vydaný 17. marca 2020.

Nové funkcie a zmeny v OpenJDK 15:

  • Druhý inkubátor rozhrania API na prístup do cudzej pamäte, ktoré umožňuje programom Java bezpečný a efektívny prístup k cudzej pamäti mimo haldy Java. API by malo byť schopné pracovať na rôznych druhoch cudzej pamäte, ako je natívna, perzistentná a spravovaná halda. Mnoho programov Java pristupuje k cudzej pamäti, napríklad Ignite a MapDB. Rozhranie API by pomohlo vyhnúť sa nákladom a nepredvídateľnosti spojeným s odvozom odpadu, zdieľať pamäť medzi procesmi a serializovať a deserializovať obsah pamäte mapovaním súborov do pamäte. Rozhranie Java API v súčasnosti neposkytuje uspokojivé riešenie pre prístup do cudzej pamäte. Podľa nového návrhu by však nemalo byť možné, aby API narušilo bezpečnosť JVM. Táto schopnosť prechádza skoršou fázou inkubátora v JDK 14 a vylepšenia ponúkané v JDK 15.
  • Ukážka zapečatených tried. Spolu s rozhraniami zapečatené triedy obmedzujú, ktoré ďalšie triedy alebo rozhrania ich môžu rozšíriť alebo implementovať. Medzi ciele tejto funkcie patrí umožnenie autorovi triedy alebo rozhrania kontrolovať, ktorý kód je zodpovedný za ich implementáciu, poskytnúť deklaratívnejší spôsob ako modifikátory prístupu na obmedzenie používania nadtriedy a podpora budúcich smerov pri porovnávaní vzorov podporou vyčerpávajúcich analýza vzorov.
  • Odstránenie zdrojového kódu a podpora vybudovania portov Solaris / SPARC, Solaris / x64 a Linux / SPARC, ktorých podpora v JDK 14 bola ukončená s cieľom ich odstránenia v budúcom vydaní. Mnoho vývojových projektov a funkcií, ako napríklad Valhalla, Loom a Panama, vyžaduje významné zmeny architektúry procesora a kódu špecifického pre operačný systém. Ukončenie podpory portov Solaris a SPARC umožní prispievateľom do komunity OpenJDK urýchliť vývoj nových funkcií, ktoré posunú platformu vpred. Systémy Solaris aj SPARC boli v posledných rokoch nahradené procesormi Linux OS a Intel.
  • Záznamy, ktoré sú triedami, ktoré fungujú ako transparentné nosiče nemenných údajov, by boli zahrnuté v druhej ukážkovej verzii v JDK 15 po debutovaní ako skorý náhľad v JDK 14. Medzi ciele plánu patrí navrhnutie objektovo orientovaného konštruktu, ktorý vyjadruje jednoduchá agregácia hodnôt, pomoc programátorom zamerať sa skôr na modelovanie nemenných údajov ako na rozšíriteľné správanie, automatická implementácia metód založených na dátach, ako sú rovní a hodnotitelia, a ochrana dlhotrvajúcich princípov Javy, ako je nominálne písanie a kompatibilita s migráciou. Záznamy možno považovať za nominálne n-tice.
  • Kryptografické podpisy založené na algoritme digitálneho podpisu Edwardsovej krivky (EdDSA). EdDSA je moderná schéma eliptickej krivky s výhodami oproti existujúcim schémam podpisu v JDK. EdDSA bude implementovaný iba u poskytovateľa SunEC. EdDSA je žiadaný kvôli svojej vylepšenej bezpečnosti a výkonu v porovnaní s inými podpisovými schémami; je už podporovaný v krypto knižniciach ako OpenSSL a BoringSSL.
  • Opätovné vykonávanie staršieho rozhrania DatagramSocket API nahradením základných implementácií rozhraniajava.net.datagram. Zásuvka a java.net.MulticastSocket API s jednoduchšími a modernejšími implementáciami, ktoré sa 1. dajú ľahko ladiť a udržiavať a 2. pracujú s virtuálnymi vláknami, ktoré sa momentálne skúmajú v Project Loom. Nový plán nadväzuje na návrh 353 na vylepšenie JDK, ktorý znovu implementoval staršie Socket API. Súčasné implementácie java.net.datagram. Zásuvka a java.net.MulticastSocket siaha až do verzie JDK 1.0 a do obdobia, keď bol protokol IPv6 stále vo vývoji. Preto súčasná implementáciaMulticastSocket sa snaží zosúladiť IPv4 a IPv6 spôsobmi, ktoré sa ťažko udržiavajú.
  • Predvolene deaktivácia zaujatého uzamknutia a ukončenie podpory všetkých súvisiacich možností príkazového riadku. Cieľom je určiť potrebu nepretržitej podpory optimalizácie synchronizovaného synchronizácie nákladného udržiavania staršieho synchronizácie, ktorá sa vo virtuálnom stroji HotSpot používa na zníženie réžie nekontrolovaného blokovania. Aj keď niektoré aplikácie Java môžu zaznamenať regresiu výkonu pri deaktivovanom predradenom uzamknutí, prírastky výkonu v predpojatom uzamknutí sú všeobecne menej zjavné, ako bývali.
  • Druhá ukážka zhody vzorov pre inštancia, po predchádzajúcom náhľade v JDK 14. Priraďovanie vzorov umožňuje jednoduchšie a stručnejšie vyjadrenie bežnej logiky v programe, hlavne podmienenej extrakcie komponentov z objektov. Jazyky ako Haskell a C # prijali zhody vzorov kvôli svojej stručnosti a bezpečnosti.
  • Skryté triedy, t. J. Triedy, ktoré nemožno priamo použiť v bajtkóde iných tried, sú určené na použitie rámcami, ktoré generujú triedy za behu a ktoré ich používajú nepriamo prostredníctvom reflexie. Skrytú triedu možno definovať ako člena hniezda riadenia prístupu a dá sa vyložiť nezávisle od iných tried. Návrh by zlepšil efektívnosť všetkých jazykov na JVM povolením štandardného API na definovanie skrytých tried, ktoré nie sú viditeľné a majú obmedzený životný cyklus. Rámec vnútri a mimo JDK by bol schopný dynamicky generovať triedy, ktoré by mohli namiesto toho definovať skryté triedy. Mnoho jazykov postavených na JVM sa kvôli flexibilite a efektívnosti spolieha na generovanie dynamických tried. Ciele tohto návrhu zahŕňajú: umožnenie rámcom definovať triedy ako neobjaviteľné podrobnosti implementácie rámca, takže proti nim nemôžu byť prepojené inými triedami ani objavené reflexiou; podpora rozšírenia hniezda riadenia prístupu o triedy, ktoré sa nedajú nájsť; a podpora agresívneho vykladania neobjaviteľných tried, takže rámce majú flexibilitu definovať toľko, koľko je potrebné. Ďalším cieľom je zastarať neštandardné API,misc.Unsafe :: defineAnonymousClassso zámerom ukončiť podporu v budúcom vydaní. Na základe tohto návrhu sa tiež nebude meniť jazyk Java.
  • Zberač odpadu Z (ZGC) prechádza od experimentálnej funkcie k produktu podľa tohto návrhu. Integrovaný do JDK 11, ktorý dorazil v septembri 2018, je ZGC škálovateľný zberač odpadu s nízkou latenciou. ZGC bol predstavený ako experimentálna funkcia, pretože vývojári Java sa rozhodli funkciu tejto veľkosti a zložitosti zaviesť opatrne a postupne. Odvtedy bolo pridaných množstvo vylepšení, od súbežného vykladania tried, zrušenia záväzku nevyužitej pamäte a podpory zdieľania údajov o triedach až po vylepšenie vedomia NUMA a predbežné dotyky s hromadou vlákien. Tiež sa zvýšila maximálna veľkosť haldy zo štyroch terabajtov na 16 terabajtov. ZGC sa zameriava na problémy s výkonom v aplikáciách, ktoré zahŕňajú obrovské množstvo dát, ako je strojové učenie, kde si chcú používatelia byť istí, že spracovanie dát nebude predmetom nepredvídateľnosti alebo dlhých prestávok kvôli zberu odpadu. Podporované platformy zahŕňajú Linux, Windows a MacOS.
  • Účelom textových blokov, ktorých ukážka je v JDK 14 aj JDK 13, je zjednodušiť prácu pri písaní programov Java tým, že uľahčí expresiu reťazcov, ktoré sa rozprestierajú na niekoľkých riadkoch zdrojového kódu, pričom sa v bežných prípadoch vyhne sekvenciám úniku. Textový blok je viacriadkový reťazcový literál, ktorý eliminuje potrebu väčšiny únikových sekvencií, automaticky formátuje reťazec predvídateľným spôsobom a v prípade potreby ponúka vývojárovi kontrolu nad formátom. Cieľom návrhu textových blokov je zvýšiť čitateľnosť reťazcov v programoch Java, ktoré označujú kód napísaný v iných jazykoch ako Java. Ďalším cieľom je podpora migrácie z reťazcových literálov stanovením, že akýkoľvek nový konštrukt môže vyjadrovať rovnakú sadu reťazcov ako reťazcový literál, interpretovať rovnaké únikové sekvencie a manipulovať s nimi rovnakým spôsobom ako s reťazcovým literálom. Vývojári OpenJDK dúfajú, že pridajú únikové sekvencie na správu explicitného bieleho priestoru a riadenia nového riadku.
  • Zberač odpadu Shenandoah s nízkou prestávkou by sa stal produkčným prvkom a odišiel by z experimentálnej fázy. Bol integrovaný do JDK 12 pred rokom.
  • Odstránenie spoločnosti Nashorn, ktorá mala debut v JDK 8 v marci 2014, ale odvtedy bola zastaraná technológiami ako GraalVM. Návrh OpenJDK 15 požaduje odstránenie rozhraní Nashorn API a nástroja príkazového riadku jjs, ktorý sa používa na vyvolanie systému Nashorn.
  • Ukončenie podpory mechanizmu aktivácie RMI pre budúce odstránenie. Mechanizmus aktivácie RMI je zastaranou súčasťou RMI, ktorá je voliteľná od verzie Java 8. Aktivácia RMI predstavuje nepretržitú záťaž pri údržbe. Podpora žiadnej inej časti RMI nebude ukončená.
$config[zx-auto] not found$config[zx-overlay] not found