Java 10 Nye funksjoner

Denne artikkelen er en del av en serie: • Java 10 LocalVariable Type-Inference

• 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:

  1. 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
  2. Støtte for funksjonsutgivelsen varer bare i seks måneder, dvs. til neste utgivelse av funksjonen
  3. Langvarig støtteutgivelse vil bli merket som LTS. Støtte for slik utgivelse vil være i tre år
  4. 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

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