Nové funkcie Java 13

1. Prehľad

V septembri 2019 vyšlo JDK 13, podľa kadencie nového vydania Javy na šesť mesiacov. V tomto článku sa pozrieme na nové funkcie a vylepšenia predstavené v tejto verzii.

2. Ukážka funkcií vývojára

Java 13 priniesla dve nové jazykové funkcie, aj keď v režime náhľadu. To znamená, že tieto funkcie sú pre vývojárov plne implementované na vyhodnotenie, ale ešte nie sú pripravené na výrobu. Na základe spätnej väzby ich tiež možno v budúcich vydaniach odstrániť alebo zmeniť na trvalé.

Musíme konkretizovať –Povoliť ukážku ako príznak príkazového riadku na použitie funkcií ukážky. Pozrime sa na ne do hĺbky.

2.1. Prepnúť výrazy (JEP 354)

Spočiatku sme videli prepínacie výrazy v JDK 12. Java 13 prepínač výrazy nadväzujú na predchádzajúcu verziu pridaním novej výnos vyhlásenie.

Použitím výnos, teraz môžeme efektívne vracať hodnoty z výrazu switch:

@Test @SuppressWarnings („ukážka“) verejné neplatné whenSwitchingOnOperationSquareMe_thenWillReturnSquare () {var me = 4; var operation = "squareMe"; var result = switch (operation) {case "doubleMe" -> {yield me * 2; } prípad "squareMe" -> {výnos mi * ja; } predvolene -> ja; }; assertEquals (16, výsledok); }

Ako vidíme, teraz je ľahké implementovať strategický vzor pomocou nového prepínač.

2.2. Textové bloky (JEP 355)

Druhou funkciou ukážky sú textové bloky pre viacriadkové Stringako napríklad vložený JSON, XML, HTML atď.

Predtým, aby sme vložili JSON do nášho kódu, deklarovali by sme to ako String doslovný:

Reťazec JSON_STRING = "{\ r \ n" + "\" meno \ ": \" Baeldung \ ", \ r \ n" + "\" webová stránka \ ": \" // www.% S.com / \ " \ r \ n "+"} ";

Teraz napíšeme rovnaký JSON pomocou String textové bloky:

Reťazec TEXT_BLOCK_JSON = "" "{" name ":" Baeldung "," website ":" //www.%s.com/ "}" "";

Ako je zrejmé, nie je potrebné uniknúť dvojitým úvodzovkám alebo pridať úvodný znak. Použitím textových blokov je vložený súbor JSON oveľa jednoduchšie na zápis, ľahšie sa číta a udržuje.

Navyše všetky String funkcie sú k dispozícii:

@Test public void whenTextBlocks_thenStringOperationsWorkSame () {assertThat (TEXT_BLOCK_JSON.contains ("Baeldung")). IsTrue (); assertThat (TEXT_BLOCK_JSON.indexOf ("www")). isGreaterThan (0); assertThat (TEXT_BLOCK_JSON.length ()). isGreaterThan (0); } 

Tiež java.lang.String teraz má tri nové spôsoby manipulácie s textovými blokmi:

  • stripIndent () - napodobňuje kompilátor na odstránenie náhodného bieleho priestoru
  • translateEscapes () - prekladá únikové sekvencie ako napr do „\ T“
  • formátovaný () - funguje rovnako ako Reťazec :: formát, ale pre textové bloky

Poďme sa rýchlo pozrieť na a Reťazec :: formátovaný príklad:

assertThat (TEXT_BLOCK_JSON.formatted ("baeldung"). contains ("www.baeldung.com")). isTrue (); assertThat (String.format (JSON_STRING, "baeldung"). contains ("www.baeldung.com")). isTrue (); 

Pretože textové bloky sú funkciou ukážky a je možné ich v budúcom vydaní odstrániť, tieto nové metódy sú označené ako zastarané.

3. Dynamické archívy CDS (JEP 350)

Zdieľanie údajov triedy (CDS) je už nejaký čas významnou vlastnosťou Java HotSpot VM. Dovoľuje metadáta triedy, ktoré sa majú zdieľať medzi rôznymi JVM, aby sa znížil čas spustenia a pamäťová stopa. Program JDK 10 rozšíril túto schopnosť pridaním aplikácie CDS (AppCDS) - aby mali vývojári možnosť zahrnúť triedy aplikácií do zdieľaného archívu. JDK 12 túto funkciu ešte vylepšil, aby predvolene obsahoval archívy CDS.

Proces archivácie tried aplikácií bol však zdĺhavý. Na generovanie archívnych súborov museli vývojári najskôr vyskúšať aplikácie, aby vytvorili zoznam tried a potom ho uložili do archívu. Potom by sa tento archív mohol použiť na zdieľanie metadát medzi JVM.

Dynamickou archiváciou tento proces JDK 13 zjednodušil. Teraz môžeme vygenerovať zdieľaný archív v čase ukončenia aplikácie. To eliminovalo potrebu skúšobných prevádzok.

Aby sme umožnili aplikáciám vytvárať dynamický zdieľaný archív nad predvoleným archívom systému, musíme pridať voľbu -XX: ArchiveClassesAtExit a zadajte názov archívu ako argument:

java -XX: ArchiveClassesAtExit = -cp AppName

Potom môžeme použiť novovytvorený archív na spustenie rovnakej aplikácie s -XX: SharedArchiveFile možnosť:

java -XX: SharedArchiveFile = -cp AppName

4. ZGC: Uncommit Unused Memory (JEP 351)

Z Garbage Collector bol v Jave 11 predstavený ako mechanizmus na zber odpadu s nízkou latenciou, takže doby pauzy GC nikdy nepresiahli 10 ms. Na rozdiel od iných HotSpot VM GC, ako sú G1 a Shenandoah, však nebol vybavený na vrátenie nepoužitej haldy pamäte do operačného systému. Java 13 pridala túto schopnosť k ZGC.

Teraz dosahujeme zníženú pamäťovú stopu spolu so zlepšením výkonu.

Počnúc jazykom Java 13 sa súbor ZGC teraz predvolene vracia nepotvrdenú pamäť do operačného systému, až kým sa nedosiahne zadaná minimálna veľkosť haldy. Ak túto funkciu nechceme používať, môžeme sa vrátiť k spôsobu Java 11 takto:

  • Pomocou možnosti -XX: -Znebežné, alebo
  • Nastavenie rovnakého minima (-Xms) a maximum (-Xmx) veľkosti hromady

ZGC má teraz navyše maximálnu podporovanú veľkosť haldy 16 TB. Skôr bol limit 4TB.

5. Znova implementujte rozhranie Legacy Socket API (JEP 353)

Videli sme Socket (java.net.Socket a java.net.ServerSocket) API ako neoddeliteľná súčasť Javy od jej vzniku. Za posledných dvadsať rokov však nikdy neboli modernizované. Napísané v starších jazykoch Java a C, boli ťažkopádne a ťažko sa udržiavali.

Java 13 tento trend zastavila a nahradila základnú implementáciu, aby zosúladila API s futuristickými vláknami užívateľského režimu. Namiesto PlainSocketImpl, rozhranie poskytovateľa teraz ukazuje na NioSocketImpl. Táto novo kódovaná implementácia je založená na rovnakej internej infraštruktúre ako java.nio.

Opäť máme spôsob, ako sa vrátiť k používaniu PlainSocketImpl. Môžeme spustiť JVM s vlastnosťou systému -Djdk.net.usePlainSocketImpl nastaviť ako pravda použiť staršiu implementáciu. Predvolená hodnota je NioSocketImpl.

6. Rôzne zmeny

Okrem vyššie uvedených JEPov nám Java 13 priniesla ešte niekoľko pozoruhodných zmien:

  • java.nio - metóda FileSystems.newFileSystem (cesta, mapa) doplnené
  • java.time - pridaný nový oficiálny názov japonskej éry
  • javax.crypto - podpora pre MS Cryptography Next Generation (CNG)
  • javax.bezpečnosť - nehnuteľnosť jdk.sasl.disabledMechanisms pridané na deaktiváciu mechanizmov SASL
  • javax.xml.crypto - Nový String konštanty predstavené na predstavenie kanonických identifikátorov URI XML 1.1
  • javax.xml.parsers - boli pridané nové metódy na vytvorenie inštancií tovární DOM a SAX s podporou menných priestorov
  • Podpora Unicode inovovaná na verziu 12.1
  • Bola pridaná podpora pre kanonizáciu hlavných názvov protokolu Kerberos a sprostredkovanie medzi oblasťami

Na odstránenie je navyše navrhnutých niekoľko rozhraní API. Medzi ne patria aj tri String vyššie uvedené metódy a javax.security.cert API.

Medzi sťahovania patrí rmic nástroj a staré funkcie z nástroja JavaDoc. Pred JDK 1.4 SocketImpl implementácie už tiež nie sú podporované.

7. Záver

V tomto článku sme videli všetkých päť návrhov vylepšenia JDK implementovaných v prostredí Java 13. Ďalej sme uviedli zoznam niektorých ďalších pozoruhodných doplnkov a odstránení.

Ako obvykle je zdrojový kód k dispozícii na serveri GitHub.


$config[zx-auto] not found$config[zx-overlay] not found