logo

Java 8 -ominaisuudet

Oracle julkaisi uuden version Javasta nimellä Java 8 18. maaliskuuta 2014. Se oli vallankumouksellinen julkaisu Java ohjelmistokehitysalustaan. Se sisältää erilaisia ​​päivityksiä Java-ohjelmointiin, JVM:ään, työkaluihin ja kirjastoihin.

Java 8 -ohjelmointikielen parannukset

Java 8 tarjoaa seuraavat ominaisuudet Java-ohjelmointiin:

  • Lambda-ilmaisut,
  • Menetelmäviitteet,
  • Toiminnalliset rajapinnat,
  • Stream API,
  • Oletusmenetelmät,
  • Base64 Encode Decode,
  • Staattiset menetelmät käyttöliittymässä,
  • Valinnainen luokka,
  • Keräilijöiden luokka,
  • ForEach()-menetelmä,
  • Rhino JavaScript -moottori,
  • Rinnakkaislajittelu,
  • Merkintöjen kirjoittaminen ja toistaminen,
  • IO-parannukset,
  • Samanaikaisuuden parannukset,
  • JDBC-parannukset jne.

Lambda-ilmaisut

Lambda-lauseke auttaa meitä kirjoittamaan koodimme toiminnalliseen tyyliin. Se tarjoaa selkeän ja tiiviin tavan toteuttaa SAM-rajapinta (Single Abstract Method) käyttämällä lauseketta. Se on erittäin hyödyllinen kokoelmakirjastossa, jossa se auttaa iteroimaan, suodattamaan ja poimimaan tietoja.

Lisätietoja ja esimerkkejä: Klikkaa tästä


Menetelmäviitteet

Java 8 Method -viittausta käytetään viittaamaan toiminnallisen käyttöliittymän menetelmään . Se on kompakti ja helppo muotoinen lambda-ilmaisu. Aina kun käytät lambda-lauseketta viittaamaan vain menetelmään, voit korvata lambda-lausekkeen menetelmäviittauksella.

Lisätietoja ja esimerkkejä: Klikkaa tästä


Toiminnallinen käyttöliittymä

Käyttöliittymää, joka sisältää vain yhden abstraktin menetelmän, kutsutaan toiminnalliseksi rajapinnaksi. Sillä voi olla mikä tahansa määrä oletus- ja staattisia menetelmiä. Se voi myös ilmoittaa objektiluokan menetelmiä.

Toiminnalliset rajapinnat tunnetaan myös nimellä Single Abstract Method Interfaces (SAM Interfaces).

Lisätietoja ja esimerkkejä: Klikkaa tästä


Valinnainen

Java esitteli uuden luokan Valinnainen Java 8:ssa. Se on julkinen viimeinen luokka, jota käytetään käsittelemään NullPointerExceptionia Java-sovelluksessa. Meidän on tuotava java.util paketti tämän luokan käyttöön. Se tarjoaa menetelmiä tietyn muuttujan arvon olemassaolon tarkistamiseksi.

Lisätietoja ja esimerkkejä: Klikkaa tästä


jokaiselle

Java tarjoaa uuden menetelmän forEach():lle elementtien iterointiin. Se määritellään Iterable- ja Stream-liitännöissä.

Se on oletusmenetelmä, joka on määritetty Iterable-liittymässä. Iterable-käyttöliittymää laajentavat kokoelmaluokat voivat käyttää forEach()-metodia elementtien iterointiin.

Tämä menetelmä ottaa yhden parametrin, joka on toiminnallinen käyttöliittymä. Joten voit välittää lambda-lausekkeen argumenttina.

Lisätietoja ja esimerkkejä: Klikkaa tästä


Päivämäärä/aika API

Java on ottanut käyttöön uuden Date and Time API:n Java 8:n jälkeen. Java.time-paketti sisältää Java 8 Date and Time -luokat.

Lisätietoja ja esimerkkejä: Klikkaa tästä


Oletusmenetelmät

Java tarjoaa mahdollisuuden luoda oletusmenetelmiä käyttöliittymän sisällä. Menetelmät, jotka on määritelty käyttöliittymän sisällä ja merkitty oletusavainsanalla, tunnetaan oletusmenetelminä. Nämä menetelmät ovat ei-abstrakteja menetelmiä, ja niillä voi olla metodirunko.

Lisätietoja ja esimerkkejä: napsauta tästä


Rhino JavaScript -moottori

Nashorn on JavaScript-moottori. Sitä käytetään JavaScript-koodin suorittamiseen dynaamisesti JVM:ssä (Java Virtual Machine). Java tarjoaa komentorivityökalun jne jota käytetään JavaScript-koodin suorittamiseen.

Voit suorittaa JavaScript-koodin kahdella tavalla:

  1. Käyttämällä jjs-komentorivityökalua ja
  2. Upottamalla Java-lähdekoodiin.

Lisätietoja ja esimerkkejä: napsauta tästä


StringJoiner

Java lisäsi uuden viimeisen luokan StringJoiner java.util-pakettiin. Sitä käytetään erottimella erotetun merkkijonon muodostamiseen. Nyt voit luoda merkkijonon ohittamalla erottimet, kuten pilkku(,), tavuviiva(-) jne.

hiiren rulla ei rullaa kunnolla

Lisätietoja ja esimerkkejä: napsauta tästä


Keräilijät

Collectors on viimeinen luokka, joka laajentaa Object-luokkaa. Se tarjoaa vähennystoimintoja, kuten elementtien keräämisen kokoelmiin, elementtien yhteenvetoa eri kriteerien mukaan jne.

Lisätietoja ja esimerkkejä: Klikkaa tästä


Stream API

Java 8 java.util.stream -paketti koostuu luokista, liitännöistä ja enumista, jotka mahdollistavat elementtien toiminnalliset toiminnot. Se suorittaa laiska laskenta. Joten se suoritetaan vain silloin, kun se vaatii.

Lisätietoja ja esimerkkejä: Klikkaa tästä


Stream-suodatin

Java-virta tarjoaa menetelmän filter() stream-elementtien suodattamiseksi annetun predikaatin perusteella. Oletetaan, että haluat saada luettelostasi vain parilliset elementit, voit tehdä tämän helposti filter()-menetelmän avulla.

Tämä menetelmä käyttää predikaattia argumenttina ja palauttaa tuloksena olevien elementtien virran.

Lisätietoja ja esimerkkejä: Klikkaa tästä


Java Base64 -koodaus ja dekoodaus

Java tarjoaa luokan Base64 käsittelemään salausta ja salauksen purkamista. Sinun on tuotava java.util.Base64-luokka lähdetiedostoon käyttääksesi sen menetelmiä.

Tämä luokka tarjoaa kolme erilaista kooderia ja dekooderia tietojen salaamiseen kullakin tasolla.

Lisätietoja ja esimerkkejä: Klikkaa tästä


Java Parallel Array -lajittelu

Java tarjoaa uuden lisäominaisuuden Arrays-luokassa, jota käytetään taulukon elementtien rinnakkaiseen lajitteluun. ParallelSort()-metodi on lisätty java.util.Arrays-luokkaan, joka käyttää JSR 166 Fork/Join -rajakohtaisuuden yhteistä poolia taulukoiden lajitteluun. Se on ylikuormitettu menetelmä.

Lisätietoja ja esimerkkejä: napsauta tästä


Java 8 -tietoturvaparannukset

1) Java Secure Socket Extension (JSSE) -palveluntarjoaja ottaa oletusarvoisesti käyttöön protokollat ​​Transport Layer Security (TLS) 1.1 ja TLS 1.2 asiakaspuolella.

2) Parannettu menetelmä AccessController.doPrivileged on lisätty, jonka avulla koodi voi vaatia osajoukkoa oikeuksistaan ​​estämättä pinon täyttä läpikulkua muiden käyttöoikeuksien tarkistamiseksi.

3) Advanced Encryption Standard (AES) ja Password-Based Encryption (PBE) -algoritmit, kuten PBEWithSHA256AndAES_128 ja PBEWithSHA512AndAES_256, on lisätty SunJCE-palveluntarjoajaan.

4) Java Secure Socket Extension (SunJSSE) on ottanut oletusarvoisesti käyttöön SNI (Server Name Indication) -laajennuksen asiakassovelluksille JDK 7:ssä ja JDK 8 tukee SNI-laajennusta palvelinsovelluksille. SNI-laajennus on ominaisuus, joka laajentaa SSL/TLS-protokollia osoittamaan, minkä palvelimen nimeen asiakas yrittää muodostaa yhteyden kättelyn aikana.

5) SunJSSE on parannettu tukemaan AEAD (Authenticated Encryption with Associated Data) -algoritmeja. Java Cryptography Extension (SunJCE) -palveluntarjoajaa on parannettu tukemaan AES/GCM/NoPadding-salauksen toteutusta sekä Galois/Counter Mode (GCM) -algoritmiparametreja.

6) Keytool-apuohjelmaan lisätään uusi komentomerkki -importpassword. Sitä käytetään hyväksymään salasana ja tallentamaan se turvallisesti salaisena avaimena. Luokat, kuten java.security.DomainLoadStoreParameter jajava.security.PKCS12Attribute, lisätään tukemaan DKS-avainsäilön tyyppiä.

7) JDK 8:ssa salausalgoritmeja on parannettu SHA-224-variantilla SHA-2-perheestä sanomakooste-toteutuksista.

8) Parannettu tuki NSA Suite B -salaukselle, joka sisältää:

satunnainen ei javassa
  • OID-rekisteröinti NSA Suite B -salausalgoritmeille
  • Tuki 2048-bittisten DSA-avainparien luomiselle ja lisäallekirjoitusalgoritmeille 2048-bittisille DSA-avaimille, kuten SHA224withDSA ja SHA256withDSA.
  • Diffie-Hellman (DH) -algoritmin avaimen kokorajoituksen nostaminen 1024:stä 2048:aan.

9) SecureRandom-luokka tuottaa kryptografisesti vahvoja satunnaislukuja, joita käytetään yksityisille tai julkisille avaimille, salakirjoille ja allekirjoitetuille viesteille. GetInstanceStrong()-menetelmä otettiin käyttöön JDK 8:ssa, joka palauttaa vahvimman SecureRandomin esiintymän. Sitä tulisi käyttää, kun sinun on luotava yksityinen ja julkinen RSA-avain. SecureRandom sisältää seuraavat muut muutokset:

  • UNIX-alustoille on otettu käyttöön kaksi uutta toteutusta, jotka tarjoavat estävän ja estävän toiminnan.

10) Mukana on uusi PKIXRevocationChecker-luokka, joka tarkistaa varmenteiden peruutustilan PKIX-algoritmilla. Se tukee parhaan toiminnan tarkistusta, loppuyksikön varmenteen tarkistusta ja mekanismikohtaisia ​​vaihtoehtoja.

11) Public Key Cryptography Standards 11 (PKCS) on laajennettu sisältämään 64-bittiset tuet Windowsille.

12) Kerberos 5:een on lisätty kaksi uutta rcache-tyyppiä. Type none tarkoittaa, ettei rcachea ole ollenkaan, ja type dfl tarkoittaa DFL-tyylistä tiedostopohjaista rcachea. Myös hyväksyjän pyytämä aliavain on nyt tuettu. Ne määritetään käyttämällä sun.security.krb5.rcache- ja sun.security.krb5.acceptor.subkey-järjestelmän ominaisuuksia.

13) JDK 8:ssa Kerberos 5 -protokollan siirtymistä ja rajoitettua delegointia tuetaan samalla alueella.

14) Java 8 on oletuksena poistanut heikon salauksen käytöstä. DES:ään liittyviä Kerberos 5 -salaustyyppejä ei tueta oletusarvoisesti. Nämä salaustyypit voidaan ottaa käyttöön lisäämällä allow_weak_crypto=true krb5.conf-tiedostoon.

15) Voit asettaa palvelimen nimeksi nolla ilmaisemaan sitomatonta palvelinta. Se tarkoittaa, että asiakas voi pyytää palvelua millä tahansa palvelimen nimellä. Kun konteksti on muodostettu, palvelin voi noutaa nimen neuvoteltuna ominaisuutena avaimen nimellä SASL.BOUND_SERVER_NAME.

16) Java Native Interface (JNI) -silta alkuperäiseen Java Generic Security Serviceen (JGSS) on nyt tuettu Mac OS X:ssä. Voit ottaa sen käyttöön asettamalla järjestelmäominaisuuden sun.security.jgss.native arvoon true.

17) Uusi järjestelmäominaisuus, jdk.tls.ephemeralDHKeySize, on määritetty mukauttamaan lyhytaikaisia ​​DH-avainkokoja. Pienin hyväksyttävä DH-avaimen koko on 1024 bittiä lukuun ottamatta vietäviä salauspaketteja tai vanhaa tilaa (jdk.tls.ephemeralDHKeySize=legacy).

18) Java Secure Socket Extension (JSSE) -palveluntarjoaja kunnioittaa oletusarvoisesti asiakkaan salauspakettia. Toimintaa voidaan kuitenkin muuttaa palvelimen salaussarjan asetusten mukaisesti kutsumalla SSLPameters.setUseCipherSuitesOrder(true) palvelimen kautta.


Java 8 -työkalujen parannukset

1) Otetaan käyttöön jjs-komento, joka kutsuu Nashorn-moottorin joko interaktiivisessa shell-tilassa tai tulkitsemaan komentosarjatiedostoja.

2) Java-komento pystyy käynnistämään JavaFX-sovelluksia, jos JavaFX-sovellus on pakattu oikein.

3) Java-komentoman sivu (sekä nroff että HTML) on uusittu kokonaan. Lisäasetukset on nyt jaettu Runtime-, Compiler-, Garbage Collection- ja Serviceability-alueisiin sen mukaan, mihin ne vaikuttavat. Nyt kuvataan useita aiemmin puuttuneita vaihtoehtoja. Siellä on myös osio vaihtoehdoista, jotka on vanhentunut tai poistettu edellisen julkaisun jälkeen.

4) Uuden jdeps-komentorivityökalun avulla kehittäjä voi analysoida luokkatiedostoja pakettitason tai luokkatason riippuvuuksien määrittämiseksi.

5) Voit käyttää diagnostiikkakomentoja etänä, jotka olivat aiemmin käytettävissä vain paikallisesti jcmd-työkalun kautta. Etäkäyttö tarjotaan Java Management Extensions (JMX) -laajennusten avulla, joten diagnostiikkakomennot altistetaan alustalle MBean, joka on rekisteröity alustan MBean-palvelimelle. MBean on com.sun.management.DiagnosticCommandMBean-käyttöliittymä.

6) Jarsigner-työkalussa on uusi vaihtoehto -tsapolicyid, jonka avulla voit pyytää allekirjoitetun aikaleiman aikaleimausviranomaiselta ja liittää sen allekirjoitettuun JAR-tiedostoon.

7) Mukana on uusi menetelmä java.lang.reflect.Executable.getParameters, jonka avulla voit käyttää minkä tahansa menetelmän tai rakentajan muodollisten parametrien nimiä. .class-tiedostot eivät kuitenkaan tallenna oletusarvoisesti muodollisia parametrien nimiä. Jos haluat tallentaa muodolliset parametrien nimet tiettyyn .class-tiedostoon ja antaa siten Reflection API:lle mahdollisuuden hakea muodollisia parametrien nimiä, käännä lähdetiedosto javac-kääntäjän vaihtoehdolla -parameters.

8) Java-kielimäärityksen (JLS) osion 15.21 tyyppisäännöt binäärivertailuille tulevat nyt oikein javacin toimeenpanoon.

9) Tässä julkaisussa com.sun.mirror-pakettiin sisältyvä apt-työkalu ja siihen liittyvä API on poistettu.

Javadoc-parannukset

Java SE 8:ssa Javadoc-työkaluun lisättiin seuraavat uudet API:t.

  • Uusi DocTree API esittelee skannerin, jonka avulla voit käydä läpi lähdekoodia, jota edustaa abstrakti syntaksipuu. Tämä laajentaa Compiler Tree APIa tarjoamaan jäsennellyn pääsyn Javadoc-kommenttien sisältöön.
  • javax.tools-paketti sisältää luokat ja käyttöliittymät, joiden avulla voit kutsua Javadoc-työkalun suoraan Java-sovelluksesta suorittamatta uutta prosessia.
  • Luokan tai rajapinnan luodun dokumentaation 'Menetelmän yhteenveto' -osio on muotoiltu uudelleen. Tämän osan menetelmäkuvaukset on ryhmitelty tyypin mukaan. Oletuksena kaikki menetelmät on lueteltu. Voit napsauttaa välilehteä tarkastellaksesi tietyn tyyppisiä menetelmiä (staattinen, ilmentymä, abstrakti, konkreettinen tai vanhentunut, jos sellaisia ​​on luokassa tai käyttöliittymässä).
  • Javadoc-työkalu tukee nyt javadoc-kommenttien sisällön tarkistamista javadocin luomien tiedostojen ongelmien varalta, jotka voivat johtaa erilaisiin ongelmiin, kuten virheelliseen HTML-koodiin tai saavutettavuusongelmiin. Ominaisuus on oletuksena käytössä, ja sitä voidaan hallita myös uudella -Xdoclint-vaihtoehdolla.

Pack200 parannukset

Java-luokan tiedostomuoto on päivitetty JSR 292:n vuoksi, joka tukee dynaamisesti kirjoitettuja kieliä Java-alustalla.

Pack200-moottori on päivitetty varmistamaan, että Java SE 8 -luokan tiedostot pakataan tehokkaasti. Nyt se tunnistaa jatkuvat poolimerkinnät ja JSR 292:n käyttöön ottamat uudet tavukoodit. Tämän seurauksena tällä pack200-työkalun versiolla luodut pakatut tiedostot eivät ole yhteensopivia unpack200-työkalun vanhempien versioiden kanssa.


Java 8 I/O -parannukset

Java 8:ssa on useita parannuksia java.nio.charset.Charset- ja laajennettuihin merkkisarjatoteutuksiin. Se sisältää seuraavat:

  • Uusi SelectorProvider, joka voi parantaa palvelimen suorituskykyä tai skaalautuvuutta. /dev/poll SelectorProvider on edelleen oletusarvo. Jos haluat käyttää Solaris-tapahtumaporttimekanismia, suorita järjestelmäominaisuuden java.nio.channels.spi.Selector arvoksi sun.nio.ch.EventPortSelectorProvider.
  • /jre/lib/charsets.jar-tiedoston kokoa on pienennetty.
  • Java.lang.String(byte[], ∗)-konstruktorin ja java.lang.String.getBytes()-metodin suorituskyky on parantunut.

Java 8 -verkkojen parannukset

1) Uusi luokka java.net.URLPermission on lisätty. Se edustaa lupaa käyttää tietyn URL-osoitteen määrittelemää resurssia.

2) Paketti jdk.net on lisätty, joka sisältää alustakohtaiset socket-vaihtoehdot ja mekanismin näiden asetusten määrittämiseksi kaikille vakiovastaketyypeille. Socket-valinnat määritellään tiedostossa jdk.net.ExtendedSocketOptions.

3) Luokassa HttpURLConnection, jos tietoturvahallinta on asennettu ja jos kutsutaan menetelmää, joka johtaa yhteyden avaamiseen, soittajalla on oltava joko 'connect' SocketPermission kohde-URL-osoitteen isäntä/portti-yhdistelmään tai URLPermission, joka sallii tämän pyynnön.

Jos automaattinen uudelleenohjaus on käytössä ja tämä pyyntö uudelleenohjataan toiseen kohteeseen, soittajalla on myös oltava lupa muodostaa yhteys uudelleenohjatun isäntä-/URL-osoitteeseen.


Java 8:n rinnakkaisuuden parannukset

Paketti java.util.concurrent lisäsi kaksi uutta käyttöliittymää ja neljä uutta luokkaa.

Java.util.concurrent-liitännät

Käyttöliittymä Kuvaus
julkinen staattinen käyttöliittymä CompletableFuture.AsynchronousCompletionTask Se on merkkirajapinta, jota käytetään asynkronisten menetelmien tuottamien asynkronisten tehtävien tunnistamiseen. Se voi olla hyödyllinen seurantaan, virheenkorjaukseen ja asynkronisten toimintojen seuraamiseen.
julkinen käyttöliittymä CompletionStage Se luo mahdollisesti asynkronisen laskennan vaiheen, joka suorittaa toiminnon tai laskee arvon, kun toinen CompletionStage valmistuu.

Java.util.concurrent luokat

Luokka Kuvaus
public class CompletableFuture laajentaa Objekti toteuttaa Future, CompletionStage Se on aFuture, joka voidaan eksplisiittisesti viimeistellä, ja sitä voidaan käyttää CompletionStage-vaiheena, joka tukee riippuvaisia ​​toimintoja ja toimintoja, jotka käynnistyvät sen valmistuttua.
julkinen staattinen luokka ConcurrentHashMap.KeySetView laajentaa Object implements Set, Serialisable Se on näkymä ConcurrentHashMapista avainten joukkona, jossa lisäykset voidaan valinnaisesti ottaa käyttöön yhdistämällä yhteiseen arvoon.
julkinen abstrakti luokka CountedCompleter laajentaa ForkJoinTask ForkJoinTask, jossa valmistumistoiminto suoritetaan, kun se käynnistetään, eikä jäljellä ole odottavia toimintoja.
public class CompletionException laajentaa RuntimeException Se heittää poikkeuksen, kun tuloksen tai tehtävän suorittamisen aikana havaitaan virhe tai muu poikkeus.

Uusia menetelmiä java.util.concurrent.ConcurrentHashMap-luokassa

ConcurrentHashMap-luokka esittelee useita uusia menetelmiä uusimmassa julkaisussaan. Se sisältää erilaisia ​​forEach-menetelmiä (forEach, forEachKey, forEachValue ja forEachEntry), hakumenetelmiä (search, searchKeys, searchValues ​​ja searchEntries) ja suuren joukon vähennysmenetelmiä (reduce, ReductionToDouble, ReductionToLong jne.). Myös muita sekalaisia ​​menetelmiä (mappingCount ja newKeySet) on lisätty.

Uudet luokat java.util.concurrent.atomicissa

Uusin julkaisu sisältää skaalautuvan, päivitettävän ja muuttuvan tuen pienen joukon uusia luokkia DoubleAccumulator, DoubleAdder, LongAccumulator jaLongAdder. Se käyttää sisäisesti kilpailunvähennystekniikoita, jotka tarjoavat valtavia suorituskyvyn parannuksia verrattuna Atomic-muuttujiin.

Luokka Kuvaus
julkinen luokka DoubleAccumulator laajentaa Numero toteuttaa Serialoitavissa Sitä käytetään yhdelle tai useammalle muuttujalle, jotka yhdessä ylläpitävät käynnissä olevaa kaksoisarvoa, joka päivitetään toimitetun funktion avulla.
public class DoubleAdder laajentaa Numero toteuttaa Serialisoitavissa Sitä käytetään yhdelle tai useammalle muuttujalle, jotka yhdessä säilyttävät alun perin nollan tuplasumman.
julkinen luokka LongAccumulator laajentaa Numero toteuttaa Serialisoitavissa Sitä käytetään yhdelle tai useammalle muuttujalle, jotka yhdessä ylläpitävät käynnissä olevan pitkän arvon, joka päivitetään mukana toimitetulla funktiolla.
public class LongAdder laajentaa Numero toteuttaa Serialisoitavissa Sitä käytetään yhdelle tai useammalle muuttujalle, jotka yhdessä säilyttävät alun perin nolla pitkän summan.

Uusia menetelmiä java.util.concurrent.ForkJoinPool-luokassa

Tämä luokka on lisännyt kaksi uutta menetelmää getCommonPoolParallelism() ja commonPool(), jotka palauttavat yhteisen poolin tai yhteisen poolin esiintymän kohdistetun rinnakkaisuustason.

Menetelmä Kuvaus
julkinen staattinen ForkJoinPool commonPool() Se palauttaa yhteisen poolin esiintymän.
Julkinen staattinen int getCommonPoolParallelism() Se palauttaa yhteisen poolin kohdistetun rinnakkaisuuden tason.

Uusi luokka java.util.concurrent.locks.StampedLock

Uusi StampedLock-luokka on lisätty, jota käytetään lisäämään ominaisuuksiin perustuva lukitus, jossa on kolme tilaa luku-/kirjoituspääsyn (kirjoitus, lukeminen ja optimistinen lukeminen) ohjaamiseen. Tämä luokka tukee myös menetelmiä, jotka ehdollisesti tarjoavat muunnoksia kolmessa tilassa.

Luokka Kuvaus
public class StampedLock laajentaa Object toteuttaa Serialisoitavissa Tämä luokka edustaa ominaisuuksiin perustuvaa lukkoa, jossa on kolme tilaa luku-/kirjoitusoikeuden hallintaan.

Java API XML Processing (JAXP) 1.6 parannukset

Java 8:aan on lisätty Java API XML Processing (JAXP) 1.6:lle. Se vaatii java.util.ServiceLoaderin määrittämän palveluntarjoajan lataustoiminnon käyttöä palvelujen lataamiseen palvelun määritystiedostoista.

Syynä tähän on mahdollistaa Java SE -alustan tuleva modularisointi, jossa palveluntarjoajat voidaan ottaa käyttöön muilla tavoilla kuin JAR-tiedostoilla ja kenties ilman palvelun määritystiedostoja.


Java-virtuaalikoneen parannukset

Invokespecial-käskyjen tarkistusta on tiukennettu siten, että vain nykyisen luokan tai sen suoran superluokan ilmentymän alustusmenetelmää voidaan kutsua.


Java Mission Control 5.3 sisältyy Java 8:aan

Java Mission Control (JMC) on edistynyt työkalusarja, joka mahdollistaa tehokkaan ja yksityiskohtaisen data-analyysin ja tarjoaa edistyneen, huomaamattoman Java-valvonnan ja -hallinnan. JMC tarjoaa osiot yleisille analyysialueille, kuten koodin suorituskykyyn, muistiin ja latenssiin.

Japanin ja yksinkertaistetun kiinankieliset Babel-kielipaketit sisältyvät nyt oletuksena JDK 8:n Java Mission Controliin.


Java 8:n kansainvälistymisen parannukset

1) Unicode-parannukset

JDK 8 sisältää tuen Unicode 6.2.0:lle. Se sisältää seuraavat ominaisuudet.

  • 733 uutta hahmoa, mukaan lukien Turkin liiran merkki.
  • 7 uutta skriptiä:
    • Meroiittinen hieroglyfit
    • Meroiittinen kursiivi
    • Sora Sompeng
    • Chakma
    • Sharada
    • Takri
    • Miao
  • 11 uutta lohkoa: mukaan lukien 7 lohkoa yllä luetelluille uusille skripteille ja 4 lohkoa seuraaville olemassa oleville skripteille:
  • Arabia Extended-A
  • Sundanese lisäosa
  • Meek Extensions -kokous
  • Arabialaiset matemaattiset aakkosymbolit

Unicode-CLDR-tietojen ja java.locale.providers-järjestelmän ominaisuus on otettu käyttöön

Unicode Consortium on julkaissut Common Locale Data Repository (CLDR) -projektin 'tukeakseen maailman kieliä suurimmalla ja laajimmalla saatavilla olevalla kielitietovarastolla'. CLDR:stä on tulossa kielitiedon tosiasiallinen standardi. CLDR:n XML-pohjaiset aluetiedot on sisällytetty JDK 8 -julkaisuun, mutta se on oletuksena poistettu käytöstä.

Aluetiedoille on neljä erillistä lähdettä:

  • CLDR edustaa Unicode CLDR -projektin toimittamia aluetietoja.
  • HOST edustaa nykyisen käyttäjän mukauttamista taustalla olevan käyttöjärjestelmän asetuksiin. Se toimii vain käyttäjän oletuskieliasetuksen kanssa, ja muokattavat asetukset voivat vaihdella käyttöjärjestelmän mukaan, mutta ensisijaisesti tuetaan päivämäärä-, aika-, numero- ja valuuttamuotoja.
  • SPI edustaa asennetuissa SPI-palveluntarjoajissa toteutettuja aluekohtaisia ​​palveluita.
  • JRE edustaa aluetietoja, jotka ovat yhteensopivia aiempien JRE-julkaisujen kanssa.

Valitse haluamasi kielitietolähde java.locale.providers-järjestelmäominaisuuden avulla. luettelemalla tietolähteet halutussa järjestyksessä. Esimerkki: java.locale.providers=HOST,SPI,CLDR,JRE Oletuskäyttäytyminen vastaa seuraavaa asetusta: java.locale.providers=JRE,SPI


Java 8 New Calendar ja Locale API:t

JDK 8 sisältää kaksi uutta luokkaa, useita uusia menetelmiä ja uuden palautusarvon olemassa olevalle staattiselle menetelmälle.

Java.util.spi -pakettiin on lisätty kaksi uutta abstraktia luokkaa palveluntarjoajille.

Luokka Kuvaus
julkinen abstrakti luokka CalendarDataProvider laajentaa LocaleServiceProvider-ohjelmaa Se on abstrakti luokka palveluntarjoajille, jotka tarjoavat aluekohtaisia ​​kalenteriparametreja.
julkinen abstrakti luokka CalendarNameProvider laajentaa LocaleServiceProvider-ohjelmaa Se on abstrakti luokka palveluntarjoajille, jotka tarjoavat lokalisoidut merkkijonoesitykset (näyttönimet) kalenterikenttien arvoista.

Staattinen menetelmä pystyy nyt tunnistamaan numerointijärjestelmän Locale.UNICODE_LOCALE_EXTENSION.

Menetelmä Kuvaus
julkinen staattinen lopullinen DecimalFormatSymbols getInstance (Locale locale) Sitä käytetään DecimalFormatSymbols-ilmentymän hakemiseen määritetylle maa-asetukselle. Tämä menetelmä tarjoaa pääsyn DecimalFormatSymbols-esiintymiin itse Java-ajonympäristön tukemille alueille sekä asennettujen DecimalFormatSymbolsProvider-toteutusten tukemille kielille. Se heittää NullPointerExceptionin, jos maa-asetus on tyhjä.

Lisätty uusia menetelmiä kalenterin API:ssa:

Menetelmä Kuvaus
julkinen boolean isSupportedLocale (Locale locale) Palauttaa tosi, jos tämä palveluntarjoaja tukee annettua aluetta. Annettu alue voi sisältää laajennuksia, jotka tulee ottaa huomioon tuen määrittämisessä. Se määritellään java.util.spi.LocaleServiceProvider-luokassa
julkinen merkkijono getCalendarType() Se palauttaa tämän kalenterin kalenterityypin. Kalenterityypit määritellään Unicode Locale Data Markup Language (LDML) -määrityksen mukaan. Se määritellään luokassa java.util.Calendar.

Calendar.getDisplayName- ja Calendar.getDisplayNames-menetelmille on lisätty uusia tyylimäärityksiä kalenterin nimen muodon määrittämiseksi.


Tarkentaja Kuvaus
julkinen staattinen lopullinen int SHORT_FORMAT Se on getDisplayName- ja getDisplayNames-tyylimäärittäjä, joka ilmaisee muodolle käytetyn lyhyen nimen.
julkinen staattinen lopullinen int LONG_FORMAT Se on getDisplayName- ja getDisplayNames-tyylimäärittäjä, joka ilmaisee muotoon käytetyn pitkän nimen.
julkinen staattinen lopullinen int SHORT_STANDALONE Se on getDisplayName- ja getDisplayNames-tyylimäärittäjä, joka ilmaisee itsenäisesti käytetyn lyhyen nimen, kuten kuukauden lyhenteen kalenterin otsikoina.
julkinen staattinen lopullinen int LONG_STANDALONE Se on getDisplayName- ja getDisplayNames-tyylimäärittäjä, joka ilmaisee itsenäisesti käytetyn pitkän nimen, kuten kuukauden nimen kalenterin otsikoina.

Kaksi uutta Locale-menetelmää paikallisten (valinnaisten) laajennusten käsittelemiseen.

Menetelmä Kuvaus
julkinen boolean hasExtensions() Palauttaa tosi, jos tällä kielellä on laajennuksia.
julkiset kielialueet, laajennukset() Se palauttaa kopion tästä alueesta ilman laajennuksia. Jos tällä Kielellä ei ole laajennuksia, tämä kieliasetus palautetaan itse.

Kaksi uutta Locale.filter-menetelmää palauttavat luettelon Locale-esiintymistä, jotka vastaavat RFC 4647:ssä määritettyjä ehtoja:

Menetelmä Kuvaus
julkinen staattinen luettelosuodatin (List priorityList, Collection locales) Se palauttaa luettelon vastaavista Locale-esiintymistä käyttämällä RFC 4647:ssä määritettyä suodatusmekanismia. Tämä vastaa suodatinta (List, Collection, FilteringMode), kun tila on Locale.FilteringMode.AUTOSELECT_FILTERING.
julkinen staattinen luettelosuodatin (List priorityList, Collection locales, Locale.FilteringMode -tila) Se palauttaa luettelon vastaavista Locale-esiintymistä käyttämällä RFC 4647:ssä määritettyä suodatusmekanismia.

Kaksi uutta Locale.filterTags-menetelmää palauttavat luettelon kielitunnisteista, jotka vastaavat RFC 4647:ssä määritettyjä ehtoja.

Menetelmä Kuvaus
julkinen staattinen luettelon suodatintunnisteet (List priorityList, Collection tags) Se palauttaa luettelon vastaavista kielitunnisteista käyttämällä RFC 4647:ssä määritettyä perussuodatusmekanismia. Tämä vastaa suodatintunnisteita (List, Collection, FilteringMode), kun tila on Locale.FilteringMode.AUTOSELECT_FILTERING.
julkinen staattinen luettelon suodatintunnisteet (List priorityList, Collection tags, Locale.FilteringMode -tila) Se palauttaa luettelon vastaavista kielitunnisteista käyttämällä RFC 4647:ssä määritettyä perussuodatusmekanismia.

Kaksi uutta hakumenetelmää palauttavat parhaiten vastaavan alue- tai kielitunnisteen käyttämällä RFC 4647:ssä määritettyä hakumekanismia.

Menetelmä Kuvaus
julkinen staattinen maa-asetusten haku (List priorityList, Collection locales) Se palauttaa Locale-instanssin parhaiten vastaavalle kielitunnisteelle käyttämällä RFC 4647:ssä määritettyä hakumekanismia.
Julkinen staattinen merkkijonon hakutunniste (Lista prioriteettiluettelo, kokoelmatunnisteet) Se palauttaa parhaiten vastaavan kielitunnisteen käyttämällä RFC 4647:ssä määriteltyä hakumekanismia.

Muut Java 8 -version parannukset

Parannuksia JDK 8u5:ssä

1) Sovelluksen turvakehotteiden näyttötiheyttä on vähennetty.


Parannuksia JDK 8u11:ssä

1) Mahdollisuus estää sponsorien tarjoukset, kun JRE asennetaan tai päivitetään, on saatavilla Java-ohjauspaneelin Lisäasetukset-välilehdellä.

2) Entry-Point-attribuutti voidaan sisällyttää JAR-tiedoston luetteloon, jotta yksi tai useampi luokka voidaan tunnistaa kelvolliseksi aloituspisteeksi RIA:lle (Rich Internet -sovellukselle).


JDK 8u20:n parannukset

1) javafxpackager-työkalu on nimetty uudelleen javapackageriksi. Tätä työkalua on parannettu uusilla argumenteilla itsenäisille sovellusniputtajille.

Seuraavat parannukset liittyvät Java-työkaluun:

  • Restricted Transaction Memory (RTM) -muistiin liittyvä kokeellinen JIT-kääntäjävaihtoehto on lisätty.
  • Useita merkkijonojen duplikointiin liittyviä vaihtoehtoja on lisätty.
  • Useita Advanced Encryption Standard (AES) -ominaisuuksiin liittyviä vaihtoehtoja on lisätty.
  • Jätteenkeräysvaihtoehtojen yhdistelmät on poistettu käytöstä.

2) Roskienkeräyksen viritysopas on lisätty Java HotSpot -virtuaalikoneeseen. Se kuvaa Java HotSpot VM:n mukana tulevat roskankeräimet ja auttaa sinua päättämään, mikä roskankerääjä voi parhaiten optimoida sovelluksesi suorituskyvyn, varsinkin jos se käsittelee suuria tietomääriä (useita gigatavuja), siinä on useita säikeitä ja sen tapahtumanopeus on korkea. .


Parannuksia JDK 8u31:ssä

1) Tässä julkaisussa SSLv3-protokolla on poistettu Java Control Panel Advanced -asetuksista.


Parannuksia JDK 8u40:ssä

Java työkalu

1) -XX:+CheckEndorsedAndExtDirs on lisätty, koska hyväksyttyjen standardien ohitusmekanismi (JDK-8065675) ja laajennusmekanismi (JDK-8065702) on poistettu käytöstä. Vaihtoehto auttaa tunnistamaan näiden mekanismien olemassa olevat käyttötavat, ja sitä tuetaan JDK 7u80:ssa ja JDK 8u40:ssä.

2) Java Flight Recorder (JFR) tarjoaa useita tapoja vapauttaa kaupallisia ominaisuuksia ja ottaa JFR käyttöön sovelluksen ajon aikana.

Se sisältää Java-komentorivivaihtoehdot, kuten jcmd-diagnostiikkakomennot ja graafisen käyttöliittymän (GUI) -ohjaimet Java Mission Controlissa. Tämän joustavuuden avulla voit tarjota sopivat vaihtoehdot käynnistyksen yhteydessä tai olla vuorovaikutuksessa JFR:n kanssa myöhemmin.

3) Vaihtoehdolla -XX:StartFlightRecording=parameter=value on uusi parametri, dumponexit=true, joka määrittää, tuleeko JFR-tiedon vedostiedosto luoda, kun JVM päättyy hallitusti.

4) Restricted Transaction Memory (RTM) -muistiin liittyvät vaihtoehdot eivät ole enää kokeellisia. Näitä asetuksia ovat -XX:RTMAbortRatio=keskeytyssuhde, -XX:RTMRetryCount=uudelleenyritysten_määrä, -XX:+UseRTMDeopt ja -XX:+UseRTMLocking.

5) Java 8:ssa on otettu käyttöön sovellusluokan tietojen jakaminen (AppCDS). AppCDS laajentaa CDS:ää (Class Data Sharing) mahdollistaakseen standardilaajennusten hakemistojen luokkien ja sovellusluokkapolun sijoittamisen jaettuun arkistoon. Tämä on kaupallinen ominaisuus, eikä sitä pidetä enää kokeellisena.

6) Uusia vaihtoehtoja -XX:+ResourceManagement ja -XX:ResourceManagementSampleInterval=arvo on lisätty.

7) Lisätietoa suurista sivuista. Suuret sivut, jotka tunnetaan myös nimellä valtavat sivut, ovat muistisivuja, jotka ovat huomattavasti tavallista muistisivun kokoa suurempia. Suuret sivut optimoivat prosessorin käännös-Lookaside-puskurit. Linux-vaihtoehdot -XX:+UseHugeTLBFS, -XX:+UseSHM ja -XX:+UseTransparentHugePages on dokumentoitu.

8) Vaihtoehto -XX:ObjectAlignmentInBytes=alignment on dokumentoitu.

JJS työkalu

1) Vaihtoehto --optimistic-types=[true|false] on lisätty. Se ottaa käyttöön tai poistaa käytöstä optimistiset tyyppioletukset deoptimoimalla uudelleenkääntämisellä.

2) Vaihtoehto --language=[es5] on lisätty jjs-työkaluun. Se määrittää ECMAScript-kieliversion.

Javapacker työkalu

1) OS X -niputtajille on saatavilla uusia argumentteja. Argumentti mac.CFBundleVersion identifioi käytettävän sisäisen versionumeron.

2) Argumentti mac.dmg.simple osoittaa, ohitetaanko AppleScript-koodin suorittamisesta riippuvat DMG-muokkausvaiheet.

Jcmd työkalu

Jcmd-työkalua käytetään dynaamiseen vuorovaikutukseen Java Flight Recorderin (JFR) kanssa. Voit käyttää sitä avataksesi kaupallisia ominaisuuksia, ottaa käyttöön/aloittaa/pysäyttää lentotallenteet ja saada erilaisia ​​tilaviestejä järjestelmästä.

Jstat työkalu

Jstat-työkalu on päivitetty tiedoilla pakatusta luokkaavaruudesta, joka on erityinen osa metaavaruutta.

len of merkkijono javassa

Virtuaalikone

Scalable Native Memory Tracking HotSpot VM -ominaisuus auttaa diagnosoimaan virtuaalikoneen muistivuotoja ja selvittämään käyttäjiä, kun muistivuotoja ei ole VM:ssä. Native Memory Tracker voidaan ajaa ilman automaattista sammumista suurissa järjestelmissä ja ilman, että se heikennä suorituskykyä, joka ylittää sen, mitä pidetään hyväksyttävänä pienille ohjelmille.