Java 10 Nye funktioner

Denne artikel er en del af en serie: • Java 10 LocalVariable Type-Inference

• Java 10 Performance Forbedringer

• Java 10 nye funktioner (nuværende artikel)

1. Introduktion

JDK 10, som er en implementering af Java SE 10, blev udgivet den 20. marts 2018.

I denne artikel vil vi dække og udforske de nye funktioner og ændringer, der er introduceret i JDK 10.

2. Lokal variabel type inferens

Følg linket for en detaljeret artikel om denne funktion:

Java 10 Lokal variabel type inferens

3. Uændrede samlinger

Der er et par ændringer relateret til umodificerbare samlinger i Java 10.

3.1. copyOf ()

java.util.List, java.util.Kort og java.util.Set hver fik en ny statisk metode copyOf (samling).

Den returnerer den umodificerbare kopi af det givne Kollektion:

@Test (forventet = UnsupportedOperationException.class) offentlig ugyldig nårModifyCopyOfList_thenThrowsException () {List copyList = List.copyOf (someIntList); copyList.add (4); }

Ethvert forsøg på at ændre en sådan samling vil resultere i java.lang.UnderstøttetOperationExceptionruntime undtagelse.

3.2. toUnmodifiable * ()

java.util.stream.Collectors få yderligere metoder til at indsamle en Strøm til umodificerbar Liste, Kort eller Sæt:

@Test (forventet = Ikke understøttetOperationException.class) offentlig ugyldig nårModifyToUnmodifiableList_thenThrowsException () {List evenList = someIntList.stream () .filter (i -> i% 2 == 0) .collect (Collectors.toUnmodifiableList ()); evenList.add (4); }

Ethvert forsøg på at ændre en sådan samling vil resultere i java.lang.UnderstøttetOperationExceptionruntime undtagelse.

4. Valgfri * .orElseThrow ()

java.util. Valgfrit, java.util.OptionalDouble, java.util.OptionalIntog java.util.OptionalLonghver fik en ny metode orElseThrow ()som ikke tager noget argument og kaster NoSuchElementExceptionhvis der ikke er nogen værdi til stede:

@Test offentlig ugyldig nårListContainsInteger_OrElseThrowReturnsInteger () {Integer firstEven = someIntList.stream () .filter (i -> i% 2 == 0) .findFirst () .orElseThrow (); er (firstEven) .equals (Integer.valueOf (2)); }

Det er synonymt med og er nu det foretrukne alternativ til det eksisterende få()metode.

5. Ydelsesforbedringer

Følg linket for en detaljeret artikel om denne funktion:

Java 10 Performance Forbedringer

6. Containerbevidsthed

JVM'er er nu opmærksomme på at blive kørt i en Docker-container og udtrækker containerspecifik konfiguration i stedet for at forespørge selve operativsystemet - det gælder data som antallet af CPU'er og total hukommelse, der er allokeret til containeren.

Denne support er dog kun tilgængelig for Linux-baserede platforme. Denne nye support er aktiveret som standard og kan deaktiveres i kommandolinjen med JVM-indstillingen:

-XX: -UseContainerSupport

Denne ændring tilføjer også en JVM-indstilling, der giver mulighed for at specificere antallet af CPU'er, som JVM vil bruge:

-XX: ActiveProcessorCount = antal

Der er også tilføjet tre nye JVM-muligheder for at give Docker-containerbrugere mulighed for at få mere finkornet kontrol over den mængde systemhukommelse, der skal bruges til Java Heap:

-XX: InitialRAMPercentage -XX: MaxRAMPercentage -XX: MinRAMPercentage

7. Rodcertifikater

Cacerts keystore, der oprindeligt var tom indtil videre, er beregnet til at indeholde et sæt rodcertifikater, der kan bruges til at skabe tillid til de certifikatkæder, der bruges af forskellige sikkerhedsprotokoller.

Som et resultat fungerede kritiske sikkerhedskomponenter som TLS som standard ikke under OpenJDK-builds.

Med Java 10 har Oracle open-sourced rodcertifikaterne i Oracle's Java SE Root CA-program for at gøre OpenJDK-builds mere attraktive for udviklere og for at reducere forskellene mellem disse builds og Oracle JDK builds.

8. Afskrivninger og fjernelser

8.1. Kommandolinjevalg og værktøjer

Værktøj javah er fjernet fra Java 10, som genererede C-headere og kildefiler, der var nødvendige for at implementere native metoder - nu, javac -h kan bruges i stedet.

politiværktøj var det UI-baserede værktøj til oprettelse og styring af politikfiler. Dette er nu fjernet. Brugeren kan bruge en simpel teksteditor til at udføre denne handling.

Fjernet java -Xprofmulighed. Indstillingen blev brugt til at profilere det kørende program og sende profildata til standardoutput. Brugeren skal nu bruge jmap værktøj i stedet.

8.2. API'er

Forældet java.security.acl-pakke er blevet markeret forRemoval = true og kan fjernes i en fremtidig version af Java SE. Det er blevet erstattet af java.sikkerhed.Politik og relaterede klasser.

Tilsvarende er Java.security. {Certificate, Identity, IdentityScope, Signer} API'er markeret forRemoval = true.

9. Tidsbaseret versionversionering

Fra og med Java 10 er Oracle flyttet til den tidsbaserede frigivelse af Java. Dette har følgende konsekvenser:

  1. En ny Java-udgivelse hver sjette måned. Udgivelsen fra marts 2018 er JDK 10, udgivelsen fra september 2018 er JDK 11 osv. Disse kaldes funktionsudgivelser og forventes at indeholde mindst en eller to vigtige funktioner
  2. Support til funktionsudgivelsen varer kun i seks måneder, dvs. indtil næste funktionsudgivelse
  3. Langsigtet frigivelse af support markeres som LTS. Støtte til en sådan frigivelse vil vare i tre år
  4. Java 11 vil være en LTS-udgivelse

java -version vil nu indeholde GA-datoen, hvilket gør det lettere at identificere, hvor gammel udgivelsen er:

$ java -version openjdk version "10" 2018-03-20 OpenJDK Runtime Environment 18.3 (build 10 + 46) OpenJDK 64-Bit Server VM 18.3 (build 10 + 46, blandet tilstand)

10. Konklusion

I denne artikel så vi de nye funktioner og ændringer, der blev bragt ind af Java 10.

Som sædvanligt kan kodeuddrag findes på GitHub.

« Tidligere forbedringer af Java 10-ydeevne