Anleitung zu Java 10

Anleitung zu Java 10

1. Einführung

JDK 10, eine Implementierung von Java SE 10, wurde am 20. März 2018 veröffentlicht.

In diesem Artikel werden die neuen Funktionen und Änderungen, die in JDK 10 eingeführt wurden, behandelt und untersucht.

2. Inferenz des lokalen Variablentyps

Folgen Sie dem Link für einen ausführlichen Artikel zu dieser Funktion:

3. Nicht veränderbare Sammlungen

Es gibt einige Änderungen in Bezug auf nicht änderbare Sammlungen in Java 10.

3.1. copyOf()

java.util.List,java.util.Map andjava.util.Set each hat eine neue statische MethodecopyOf(Collection) erhalten.

Es gibt die nicht veränderbare Kopie der angegebenenCollection: zurück

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

Jeder Versuch, eine solche Sammlung zu ändern, würde zu einerjava.lang.UnsupportedOperationExceptionruntime-Ausnahme führen.

3.2. toUnmodifiable*()

java.util.stream.Collectors get zusätzliche Methoden, umStream in nicht modifizierbareList,Map orSet zu sammeln:

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

Jeder Versuch, eine solche Sammlung zu ändern, würde zu einerjava.lang.UnsupportedOperationExceptionruntime-Ausnahme führen.

4. Optional.orElseThrow () *

java.util.Optional,java.util.OptionalDouble,java.util.OptionalIntandjava.util.OptionalLongeach hat eine neue MethodeorElseThrow(), die kein Argument akzeptiert undNoSuchElementExceptionauslöst, wenn kein Wert vorhanden ist:

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

Es ist gleichbedeutend mit und ist jetzt die bevorzugte Alternative zur bestehendenget()-Smethodik.

5. Leistungsverbesserungen

Folgen Sie dem Link für einen ausführlichen Artikel zu dieser Funktion:

6. Behälterbewusstsein

JVMs are now aware of being run in a Docker container and extrahiert die container-spezifische Konfiguration, anstatt das Betriebssystem selbst abzufragen. Dies gilt für Daten wie die Anzahl der CPUs und den Gesamtspeicher, die dem Container zugewiesen wurden.

Diese Unterstützung ist jedoch nur für Linux-basierte Plattformen verfügbar. Diese neue Unterstützung ist standardmäßig aktiviert und kann in der Befehlszeile mit der JVM-Option deaktiviert werden:

-XX:-UseContainerSupport

Außerdem wird durch diese Änderung eine JVM-Option hinzugefügt, mit der die Anzahl der CPUs angegeben werden kann, die von der JVM verwendet werden:

-XX:ActiveProcessorCount=count

Außerdem wurden drei neue JVM-Optionen hinzugefügt, mit denen Benutzer von Docker-Containern eine genauere Kontrolle über den für den Java-Heap verwendeten Systemspeicher erhalten können:

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

7. Stammzertifikate

Der Cacerts-Keystore, der ursprünglich leer war, soll eine Reihe von Stammzertifikaten enthalten, mit denen das Vertrauen in die von verschiedenen Sicherheitsprotokollen verwendeten Zertifikatketten hergestellt werden kann.

Infolgedessen funktionierten kritische Sicherheitskomponenten wie TLS unter OpenJDK-Builds standardmäßig nicht.

With Java 10, Oracle has open-sourced the root certificates in Das Java SE Root CA-Programm von Oracle, um OpenJDK-Builds für Entwickler attraktiver zu machen und die Unterschiede zwischen diesen Builds und Oracle JDK-Builds zu verringern.

8. Abschreibungen und Umzüge

8.1. Befehlszeilenoptionen und -tools

Das Tooljavah wurde aus Java 10 entfernt, wodurch C-Header und Quelldateien generiert wurden, die für die Implementierung nativer Methoden erforderlich waren. Jetzt wird stattdessenjavac -h can verwendet.

policytool ist das UI-basierte Tool für die Erstellung und Verwaltung von Richtliniendateien. Dies wurde nun entfernt. Der Benutzer kann einen einfachen Texteditor verwenden, um diesen Vorgang auszuführen.

java -Xprofoption entfernt. Die Option wurde verwendet, um das laufende Programm zu profilieren und Profildaten an die Standardausgabe zu senden. Der Benutzer sollte jetzt stattdessenjmap tool verwenden.

8.2. APIs

Das veraltete Paket java.security.acl wurde für Removal = true markiert und muss in einer zukünftigen Version von Java SE entfernt werden. Es wurde durchjava.security.Policy andklassen ersetzt.

In ähnlicher Weise sind die APIs java.security. \ {Certificate, Identity, IdentityScope, Signer} mitforRemoval=true gekennzeichnet.

9. Zeitbasierte Release-Versionierung

Seit Java 10 ist Oracle auf die zeitbasierte Version von Java umgestiegen. Dies hat folgende Auswirkungen:

  1. A new Java release every six months. Die Version für März 2018 ist JDK 10, die Version für September 2018 ist JDK 11 und so weiter. Diese werden als Feature-Releases bezeichnet und enthalten voraussichtlich mindestens ein oder zwei wichtige Features

  2. Support for the feature release will last only for six months, d. h. bis zur nächsten Feature-Version

  3. Die langfristige Freigabe des Supports wird als LTS gekennzeichnet. Die Unterstützung für eine solche Veröffentlichung beträgt drei Jahre

  4. Java 11 wird eine LTS-Version sein

java -version will now contain the GA date, um leichter erkennen zu können, wie alt die Version ist:

$ 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, mixed mode)

10. Fazit

In diesem Artikel haben wir die neuen Funktionen und Änderungen von Java 10 gesehen.

Wie üblich können Codefragmenteover on GitHub gefunden werden.