Java 10 Nye funksjoner
• Java 10 ytelsesforbedringer
• Java 10 nye funksjoner (nåværende artikkel)
1. Introduksjon
JDK 10, som er en implementering av Java SE 10, ble utgitt 20. mars 2018.
I denne artikkelen vil vi dekke og utforske de nye funksjonene og endringene introdusert i JDK 10.
2. Lokal variabel type inferens
Følg lenken for en grundig artikkel om denne funksjonen:
Java 10 Local Variable Type Inference
3. Umodifiserbare samlinger
Det er et par endringer knyttet til umodifiserbare samlinger i Java 10.
3.1. kopi av()
java.util.Liste, java.util.Kart og java.util.Sett hver fikk en ny statisk metode copyOf (samling).
Den returnerer den umodifiserbare kopien av gaven Samling:
@Test (forventet = UnsupportedOperationException.class) offentlig ugyldig nårModifyCopyOfList_thenThrowsException () {List copyList = List.copyOf (someIntList); copyList.add (4); }
Ethvert forsøk på å endre en slik samling vil resultere i java.lang.UnsupportedOperationExceptionkjøretid unntak.
3.2. toUnmodifiable * ()
java.util.stream.Collectors få flere metoder for å samle inn en Strøm til umodifiserbar Liste, Kart eller Sett:
@Test (forventet = ikke støttetOperationException.class) offentlig ugyldig nårModifyToUnmodifiableList_thenThrowsException () {List evenList = someIntList.stream () .filter (i -> i% 2 == 0) .collect (Collectors.toUnmodifiableList ()); evenList.add (4); }
Ethvert forsøk på å endre en slik samling vil resultere i java.lang.UnsupportedOperationExceptionkjøretid unntak.
4. Valgfritt * .orElseThrow ()
java.util. valgfritt, java.util.OptionalDouble, java.util.OptionalIntog java.util.OptionalLonghver fikk en ny metode orElseThrow ()som ikke tar noe argument og kaster NoSuchElementExceptionhvis ingen verdi er til stede:
@Test offentlig ugyldig nårListContainsInteger_OrElseThrowReturnsInteger () {Heltall firstEven = someIntList.stream () .filter (i -> i% 2 == 0) .findFirst () .orElseThrow (); er (firstEven) .equals (Integer.valueOf (2)); }
Det er synonymt med og er nå det foretrukne alternativet til det eksisterende få()metode.
5. Ytelsesforbedringer
Følg lenken for en grundig artikkel om denne funksjonen:
Java 10 ytelsesforbedringer
6. Container Awareness
JVM-er er nå klar over at de kjøres i en Docker-container og vil trekke ut containerspesifikk konfigurasjon i stedet for å spørre om operativsystemet selv - det gjelder data som antall CPUer og totalt minne som er tildelt beholderen.
Denne støtten er imidlertid bare tilgjengelig for Linux-baserte plattformer. Denne nye støtten er aktivert som standard og kan deaktiveres på kommandolinjen med JVM-alternativet:
-XX: -UseContainerSupport
Denne endringen legger også til et JVM-alternativ som gir muligheten til å spesifisere antall CPUer som JVM vil bruke:
-XX: ActiveProcessorCount = antall
Det er også lagt til tre nye JVM-alternativer for å tillate brukere av Docker-containere å få mer finkornet kontroll over mengden systemminne som skal brukes til Java Heap:
-XX: InitialRAMPercentage -XX: MaxRAMPercentage -XX: MinRAMPercentage
7. Rootsertifikater
Cacerts keystore, som opprinnelig var tom så langt, er ment å inneholde et sett med rotsertifikater som kan brukes til å etablere tillit til sertifikatkjedene som brukes av forskjellige sikkerhetsprotokoller.
Som et resultat fungerte kritiske sikkerhetskomponenter som TLS ikke som standard under OpenJDK-bygninger.
Med Java 10 har Oracle rotsertifikatene med åpen kilde i Oracle's Java SE Root CA-program for å gjøre OpenJDK builds mer attraktive for utviklere og for å redusere forskjellene mellom disse buildene og Oracle JDK builds.
8. Avskrivninger og fjerninger
8.1. Kommandolinjealternativer og verktøy
Verktøy javah er fjernet fra Java 10 som genererte C-overskrifter og kildefiler som var nødvendige for å implementere native metoder - nå, javac -h kan brukes i stedet.
politiverktøy var det brukergrensesnittbaserte verktøyet for oppretting og styring av policyfiler. Dette er nå fjernet. Brukeren kan bruke enkel teksteditor for å utføre denne operasjonen.
Fjernet java -Xprofalternativ. Alternativet ble brukt til å profilere det løpende programmet og sende profildata til standardutdata. Brukeren skal nå bruke jmap verktøy i stedet.
8.2. APIer
Utfaset java.security.acl-pakke er merket forRemoval = true og kan fjernes i en fremtidig versjon av Java SE. Det er blitt erstattet av java.security.Policy og relaterte klasser.
Tilsvarende er Java.security. {Certificate, Identity, IdentityScope, Signer} APIer merket forRemoval = true.
9. Tidsbasert versjonsversjon
Fra og med Java 10 har Oracle flyttet til den tidsbaserte utgivelsen av Java. Dette har følgende implikasjoner:
- En ny Java-utgivelse hvert sjette år. Utgivelsen fra mars 2018 er JDK 10, utgivelsen fra september 2018 er JDK 11 og så videre. Disse kalles funksjonsutgivelser og forventes å inneholde minst en eller to viktige funksjoner
- Støtte for funksjonsutgivelsen varer bare i seks måneder, dvs. til neste utgivelse av funksjonen
- Langvarig støtteutgivelse vil bli merket som LTS. Støtte for slik utgivelse vil være i tre år
- Java 11 vil være en LTS-utgivelse
java -versjon vil nå inneholde GA-datoen, noe som gjør det lettere å identifisere hvor gammel utgivelsen er:
$ java -versjon openjdk versjon "10" 2018-03-20 OpenJDK Runtime Environment 18.3 (build 10 + 46) OpenJDK 64-Bit Server VM 18.3 (build 10 + 46, mixed mode)
10. Konklusjon
I denne artikkelen så vi de nye funksjonene og endringene som ble brakt inn av Java 10.
Som vanlig kan du finne kodebiter på GitHub.
« Tidligere forbedringer for ytelse av Java 10