Java 10 nieuwe functies

Dit artikel maakt deel uit van een reeks: • Java 10 LocalVariable Type-Inference

• Verbeteringen in Java 10-prestaties

• Java 10 nieuwe functies (huidig ​​artikel)

1. Inleiding

JDK 10, een implementatie van Java SE 10, werd uitgebracht op 20 maart 2018.

In dit artikel bespreken en verkennen we de nieuwe functies en wijzigingen die in JDK 10 zijn geïntroduceerd.

2. Inferentie van lokale variabelen

Volg de link voor een uitgebreid artikel over deze functie:

Java 10 Local Variable Type Inference

3. Ongewijzigde collecties

Er zijn een aantal wijzigingen met betrekking tot niet-wijzigbare collecties in Java 10.

3.1. kopie van()

java.util.List, java.util.Map en java.util.Set elk kreeg een nieuwe statische methode copyOf (Collectie).

Het retourneert de niet-wijzigbare kopie van het gegeven Verzameling:

@Test (verwacht = UnsupportedOperationException.class) public void whenModifyCopyOfList_thenThrowsException () {List copyList = List.copyOf (someIntList); copyList.add (4); }

Elke poging om een ​​dergelijke verzameling te wijzigen, zou resulteren in java.lang.UnsupportedOperationExceptionruntime-uitzondering.

3.2. te niet wijzigen * ()

java.util.stream.Collectors extra methoden krijgen om een Stroom in onveranderlijk Lijst, Kaart of Set:

@Test (verwacht = UnsupportedOperationException.class) public void whenModifyToUnmodifiableList_thenThrowsException () {List evenList = someIntList.stream () .filter (i -> i% 2 == 0) .collect (Collectors.toUnmodifiableList ()); evenList.add (4); }

Elke poging om een ​​dergelijke verzameling te wijzigen, zou resulteren in java.lang.UnsupportedOperationExceptionruntime-uitzondering.

4. Optioneel * .orElseThrow ()

java.util.Optioneel, java.util.OptionalDouble, java.util.OptionalInten java.util.OptionalLongelk kreeg een nieuwe methode orElseThrow ()die geen argument accepteert en gooit NoSuchElementExceptionals er geen waarde aanwezig is:

@Test openbare leegte whenListContainsInteger_OrElseThrowReturnsInteger () {Geheel getal firstEven = someIntList.stream () .filter (i -> i% 2 == 0) .findFirst () .orElseThrow (); is (firstEven) .equals (Integer.valueOf (2)); }

Het is synoniem met en is nu het geprefereerde alternatief voor het bestaande krijgen()methode.

5. Prestatieverbeteringen

Volg de link voor een uitgebreid artikel over deze functie:

Verbeteringen in de prestaties van Java 10

6. Containerbewustzijn

JVM's zijn zich er nu van bewust dat ze in een Docker-container worden uitgevoerd en zal containerspecifieke configuratie extraheren in plaats van het besturingssysteem zelf te raadplegen - het is van toepassing op gegevens zoals het aantal CPU's en het totale geheugen dat aan de container is toegewezen.

Deze ondersteuning is echter alleen beschikbaar voor op Linux gebaseerde platforms. Deze nieuwe ondersteuning is standaard ingeschakeld en kan worden uitgeschakeld op de opdrachtregel met de JVM-optie:

-XX: -UseContainerSupport

Deze wijziging voegt ook een JVM-optie toe die de mogelijkheid biedt om het aantal CPU's te specificeren dat de JVM zal gebruiken:

-XX: ActiveProcessorCount = count

Er zijn ook drie nieuwe JVM-opties toegevoegd om Docker-containergebruikers meer gedetailleerde controle te geven over de hoeveelheid systeemgeheugen die zal worden gebruikt voor de Java Heap:

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

7. Rootcertificaten

De cacerts keystore, die tot nu toe aanvankelijk leeg was, is bedoeld om een ​​set rootcertificaten te bevatten die kunnen worden gebruikt om vertrouwen te wekken in de certificaatketens die door verschillende beveiligingsprotocollen worden gebruikt.

Als gevolg hiervan werkten kritieke beveiligingscomponenten zoals TLS niet standaard onder OpenJDK-builds.

Met Java 10 heeft Oracle de rootcertificaten open source gemaakt in Oracle's Java SE Root CA-programma om OpenJDK-builds aantrekkelijker te maken voor ontwikkelaars en om de verschillen tussen die builds en Oracle JDK-builds te verkleinen.

8. Afschrijvingen en verwijderingen

8.1. Opdrachtregelopties en -hulpmiddelen

Tool javah is verwijderd uit Java 10 dat C-headers en bronbestanden heeft gegenereerd die nodig waren om native methoden te implementeren - nu, javac -h kan in plaats daarvan worden gebruikt.

policytool was de UI-gebaseerde tool voor het maken en beheren van beleidsbestanden. Dit is nu verwijderd. De gebruiker kan een eenvoudige teksteditor gebruiken om deze bewerking uit te voeren.

Verwijderd java -Xprofkeuze. De optie werd gebruikt om het actieve programma te profileren en profileringsgegevens naar standaarduitvoer te sturen. De gebruiker zou nu moeten gebruiken jmap tool in plaats daarvan.

8.2. API's

Het verouderde pakket java.security.acl is gemarkeerd voorRemoval = true en is onderhevig aan verwijdering in een toekomstige versie van Java SE. Het is vervangen door java.security.Policy en aanverwante lessen.

Evenzo zijn java.security. {Certificate, Identity, IdentityScope, Signer} API's gemarkeerd forRemoval = waar.

9. Versiebeheer op basis van tijd

Beginnend met Java 10 is Oracle overgestapt naar de op tijd gebaseerde release van Java. Dit heeft de volgende gevolgen:

  1. Elke zes maanden een nieuwe Java-release. De release van maart 2018 is JDK 10, de release van september 2018 is JDK 11, enzovoort. Dit worden feature releases genoemd en er wordt verwacht dat ze ten minste een of twee belangrijke features bevatten
  2. Ondersteuning voor de functierelease duurt slechts zes maanden, d.w.z. tot de volgende feature release
  3. Release voor langdurige ondersteuning wordt gemarkeerd als LTS. Ondersteuning voor een dergelijke vrijlating duurt drie jaar
  4. Java 11 wordt een LTS-release

java -versie bevat nu de GA-datum, waardoor het gemakkelijker wordt om te bepalen hoe oud de release is:

$ java -version openjdk versie "10" 2018-03-20 OpenJDK Runtime Environment 18.3 (build 10 + 46) OpenJDK 64-bits server VM 18.3 (build 10 + 46, gemengde modus)

10. Conclusie

In dit artikel hebben we de nieuwe functies en wijzigingen gezien die door Java 10 zijn aangebracht.

Zoals gewoonlijk zijn codefragmenten te vinden op GitHub.

« Eerdere Java 10-prestatieverbeteringen