Vydanie Java SE 17

Po šiestich mesiacoch vývoja vydal Oracle Java SE 17 (Java Platform, Standard Edition 17), ktorý využíva open-source projekt OpenJDK ako referenčnú implementáciu. S výnimkou odstránenia niektorých zastaraných funkcií si Java SE 17 zachováva spätnú kompatibilitu s predchádzajúcimi vydaniami platformy Java – väčšina predtým napísaných projektov Java bude pri spustení v novej verzii fungovať bez zmien. Zostavy Java SE 17 (JDK, JRE a Server JRE) pripravené na inštaláciu sú pripravené pre Linux (x86_64, AArch64), Windows (x86_64) a macOS (x86_64, AArch64). Referenčná implementácia Java 17, 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 17 je klasifikovaná ako vydanie Long Term Support (LTS), ktoré bude naďalej dostávať aktualizácie až do roku 2029. Aktualizácie predchádzajúceho vydania Java 16 boli ukončené. Predchádzajúca LTS vetva Java 11 bude podporovaná do roku 2026. Ďalšie vydanie LTS je naplánované na september 2024. 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.

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

  • Navrhuje sa experimentálna implementácia zhody vzorov vo výrazoch „prepínač“, ktorá umožňuje používať nie presné hodnoty v štítkoch „case“, ale flexibilné šablóny pokrývajúce sériu hodnôt naraz, pre ktoré bolo predtým potrebné použiť ťažkopádne reťazce výrazov „keby... inak“. Okrem toho má „prepínač“ schopnosť spracovať hodnoty NULL. Objekt o = 123L; String formatted = switch (o) { case Integer i -> String.format("int %d", i); case Long l -> String.format("long %d", l); case Double d -> String.format("double %f", d); case String s -> String.format("String %s", s); default -> o.toString(); };
  • Stabilizovaná 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á uzavretá trieda Tvar umožňuje com.example.polar.Circle, com.example.quad.Rectangle, com.example.quad.jednoduchý.štvorec {…}
  • Navrhuje sa druhý náhľad 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é použitie operácií na viaceré hodnoty (SIMD). Na rozdiel od možností, ktoré poskytuje kompilátor HotSpot JIT pre automatickú vektorizáciu skalárnych operácií, nové API umožňuje explicitne riadiť vektorizáciu pre paralelné spracovanie údajov.
  • Pridaná ukážka rozhrania Foreign Function & Memory API, ktoré umožňuje aplikáciám interagovať s kódom a údajmi mimo prostredia Java. Nové API vám umožňuje efektívne volať funkcie, ktoré nie sú JVM, a pristupovať k pamäti, ktorá nie je spravovaná JVM. Môžete napríklad volať funkcie z externých zdieľaných knižníc a pristupovať k procesným dátam bez použitia JNI.
  • Vykresľovacie jadro macOS, ktoré poháňa Java 2D API, ktoré zase poháňa Swing API, bolo prispôsobené na používanie rozhrania Metal Graphics API. Platforma macOS naďalej štandardne používa OpenGL a aktivácia podpory Metal vyžaduje nastavenie „-Dsun.java2d.metal=true“ a minimálne macOS 10.14.x.
  • Pridaný port pre platformu macOS/AArch64 (počítače Apple založené na nových čipoch Apple M1). Špeciálnou vlastnosťou portu je podpora mechanizmu ochrany pamäte W^X (Write XOR Execute), v ktorom nie je možné súčasne pristupovať k pamäťovým stránkam pre zápis a spustenie. (kód je možné spustiť až po zakázaní zápisu a zápis na pamäťovú stránku je možný až po vypnutí vykonávania).
  • Návrat k používaniu iba sémantiky strictfp pre výrazy s pohyblivou rádovou čiarkou. Podpora „predvolenej“ sémantiky, ktorá je k dispozícii od vydania Java 1.2, bola ukončená, vrátane zjednodušení pre prácu na systémoch s veľmi starými matematickými koprocesormi x87 (po príchode inštrukcií SSE2 potreba dodatočnej sémantiky zmizla).
  • Boli implementované nové typy rozhraní pre generátory pseudonáhodných čísel a boli implementované ďalšie algoritmy na lepšie generovanie náhodných čísel. Aplikácie majú možnosť zvoliť si algoritmus na generovanie pseudonáhodných čísel. Vylepšená podpora pre generovanie náhodných prúdov objektov.
  • Vynútené prísne zapuzdrenie všetkých vnútorných častí JDK, s výnimkou kritických rozhraní API, ako je sun.misc.Unsafe. Prísne zapuzdrenie blokuje pokusy kódu o prístup k interným triedam, metódam a poliam. Predtým sa režim prísneho zapuzdrenia dal zakázať pomocou možnosti „--illegal-access=permit“, ale táto možnosť je teraz zastaraná. Aplikácie, ktoré vyžadujú prístup k interným triedam, metódam a poliam, by ich mali explicitne definovať pomocou voľby --add-opens alebo atribútu Add-Opens v súbore manifestu.
  • Aplikáciám je poskytnutá možnosť definovať filtre deserializácie údajov, ktoré môžu byť kontextovo citlivé a dynamicky vybrané na základe špecifických operácií deserializácie. Uvedené filtre sú použiteľné pre celý virtuálny stroj (v rámci JVM), t.j. pokrývajú nielen samotnú aplikáciu, ale aj knižnice tretích strán používané v aplikácii.
  • Swing pridal metódu javax.swing.filechooser.FileSystemView.getSystemIcon na načítanie veľkých ikon na zlepšenie používateľského rozhrania na obrazovkách s vysokým DPI.
  • API java.net.DatagramSocket poskytuje podporu pre pripojenie k skupinám Multicast bez potreby samostatného API java.net.MulticastSocket.
  • Pomôcka IGV (Ideal Graph Visualizer) bola vylepšená a poskytuje interaktívnu vizualizáciu reprezentácie stredného kódu v kompilátore HotSpot VM C2 JIT.
  • V JavaDoc, analogicky s kompilátorom javac, sa teraz pri výstupe chyby zobrazí číslo problematického riadku v zdrojovom súbore a miesto chyby.
  • Pridaná vlastnosť native.encoding, ktorá odráža názov systémového kódovania znakov (UTF-8, koi8-r, cp1251 atď.).
  • Bolo pridané rozhranie java.time.InstantSource, ktoré umožňuje manipuláciu s časom bez odkazu na časové pásmo.
  • Pridané API java.util.HexFormat na konverziu na hexadecimálnu reprezentáciu a naopak.
  • Do kompilátora bol pridaný režim čiernej diery, ktorý zakazuje operácie eliminácie mŕtveho kódu, ktoré možno použiť pri vykonávaní testov výkonu.
  • Do Runtime bola pridaná možnosť „-Xlog:async“ na zaznamenávanie protokolov v asynchrónnom režime.
  • Pri vytváraní zabezpečeného pripojenia je štandardne povolené TLS 1.3 (predtým sa používal TLS 1.2).
  • Predtým deklarované zastarané Applet API (java.applet.Applet*, javax.swing.JApplet), ktoré slúžilo na spúšťanie Java aplikácií v prehliadači, bolo presunuté do kategórie kritizovaných na odstránenie (stratilo sa relevantnosti po ukončení podpory pre doplnok Java pre prehliadače).
  • Security Manager, ktorý už dávno stratil svoj význam a po ukončení podpory doplnku prehliadača sa ukázal ako nevyžiadaný, bol presunutý do kategórie tých, ktoré sú naplánované na odstránenie.
  • Bol odstránený aktivačný mechanizmus RMI, ktorý je zastaraný, zaradený do kategórie možností v Java 8 a v modernej praxi sa takmer vôbec nepoužíva.
  • Experimentálny kompilátor, ktorý podporuje JIT (just-in-time) na dynamickú kompiláciu Java kódu pre HotSpot JVM, ako aj režim predvídavej kompilácie (AOT, predčasne) tried do strojového kódu pred spustením virtuálneho stroja , bol odstránený zo súpravy SDK. Kompilátor bol napísaný v jazyku Java a vychádza z práce projektu Graal. Je potrebné poznamenať, že údržba kompilátora si vyžaduje veľa práce, čo nie je opodstatnené, ak neexistuje dopyt zo strany vývojárov.

Zdroj: opennet.ru

Pridať komentár