Java 10 Neue Funktionen

Dieser Artikel ist Teil einer Reihe: • Java 10 LocalVariable Type-Inference

• Java 10-Leistungsverbesserungen

• Java 10 Neue Funktionen (aktueller Artikel)

1. Einleitung

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:

Java 10 Local Variable Type Inference

3. Nicht veränderbare Sammlungen

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

3.1. Kopie von()

java.util.List , java.util.Map und java.util.Set haben jeweils eine neue statische Methode copyOf (Collection) .

Es gibt die nicht veränderbare Kopie der angegebenen Sammlung 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 einer Laufzeitausnahme von java.lang.UnsupportedOperationException führen .

3.2. toUnmodifizierbar * ()

java.util.stream.Collectors erhalten zusätzliche Methoden, um einen Stream in einer nicht veränderbaren Liste , Karte oder Menge 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 einer Laufzeitausnahme von java.lang.UnsupportedOperationException führen .

4. Optional * .orElseThrow ()

java.util.Optional , java.util.OptionalDouble , java.util.OptionalInt und java.util.OptionalLong haben jeweils eine neue Methode orElseThrow (), die kein Argument akzeptiert und NoSuchElementException auslö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 vorhandenen get () -Methode.

5. Leistungsverbesserungen

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

Java 10 Leistungsverbesserungen

6. Containerbewusstsein

JVMs wissen jetzt, dass sie in einem Docker-Container ausgeführt werden, und extrahieren 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 Option JVM deaktiviert werden:

-XX:-UseContainerSupport

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

-XX:ActiveProcessorCount=count

Außerdem wurden drei neue JVM-Optionen hinzugefügt, mit denen Docker-Containerbenutzer eine genauere Kontrolle über die Größe des Systemspeichers erhalten, der für den Java-Heap verwendet wird:

-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.

Mit Java 10 hat Oracle die Root-Zertifikate im Java SE Root CA-Programm von Oracle als Open-Source-Version bereitgestellt , 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 Tool javah wurde aus Java 10 entfernt, wodurch C-Header und Quelldateien generiert wurden, die für die Implementierung nativer Methoden erforderlich waren. Jetzt kann stattdessen javac -h verwendet werden.

policytool war 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.

Entfernte java -Xprof Option. Die Option wurde verwendet, um das laufende Programm zu profilieren und Profildaten an die Standardausgabe zu senden. Der Benutzer sollte jetzt stattdessen das jmap- Tool verwenden.

8.2. APIs

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

Ebenso sind java.security. {Certificate, Identity, IdentityScope, Signer} APIs für Removal = true markiert .

9. Zeitbasierte Release-Versionierung

Starting with Java 10, Oracle has moved to the time-based release of Java. This has following implications:

  1. A new Java release every six months. The March 2018 release is JDK 10, the September 2018 release is JDK 11, and so forth. These are called feature releases and are expected to contain at least one or two significant features
  2. Support for the feature release will last only for six months, i.e., until next feature release
  3. Long-term support release will be marked as LTS. Support for such release will be for three years
  4. Java 11 will be an LTS release

java -version will now contain the GA date, making it easier to identify how old the release is:

$ 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. Conclusion

In this article, we saw the new features and changes brought in by Java 10.

Wie üblich finden Sie Code-Schnipsel auf GitHub.

« Frühere Java 10-Leistungsverbesserungen