Oracle veröffentlichte am 18. März 2014 eine neue Version von Java als Java 8. Es handelte sich um eine revolutionäre Version der Java-Plattform für die Softwareentwicklung. Es umfasst verschiedene Upgrades für die Java-Programmierung, JVM, Tools und Bibliotheken.
Verbesserungen der Programmiersprache Java 8
Java 8 bietet folgende Funktionen für die Java-Programmierung:
- Lambda-Ausdrücke,
- Methodenreferenzen,
- Funktionsschnittstellen,
- Stream-API,
- Standardmethoden,
- Base64-Kodierung, Dekodierung,
- Statische Methoden in der Schnittstelle,
- Optionaler Kurs,
- Sammlerklasse,
- ForEach()-Methode,
- Nashorn JavaScript Engine,
- Parallele Array-Sortierung,
- Anmerkungen eingeben und wiederholen,
- IO-Verbesserungen,
- Verbesserungen der Parallelität,
- JDBC-Erweiterungen usw.
Lambda-Ausdrücke
Der Lambda-Ausdruck hilft uns, unseren Code im funktionalen Stil zu schreiben. Es bietet eine klare und prägnante Möglichkeit, die SAM-Schnittstelle (Single Abstract Method) mithilfe eines Ausdrucks zu implementieren. Es ist sehr nützlich in Sammlungsbibliotheken, in denen es beim Iterieren, Filtern und Extrahieren von Daten hilft.
Weitere Informationen und Beispiele: klicken Sie hier
Methodenreferenzen
Die Java 8-Methodenreferenz wird verwendet, um auf die Methode der funktionalen Schnittstelle zu verweisen. Es ist eine kompakte und einfache Form des Lambda-Ausdrucks. Jedes Mal, wenn Sie einen Lambda-Ausdruck verwenden, um nur auf eine Methode zu verweisen, können Sie Ihren Lambda-Ausdruck durch einen Methodenverweis ersetzen.
Weitere Informationen und Beispiele: klicken Sie hier
Funktionsschnittstelle
Eine Schnittstelle, die nur eine abstrakte Methode enthält, wird als funktionale Schnittstelle bezeichnet. Es kann eine beliebige Anzahl von Standard- und statischen Methoden haben. Es können auch Methoden der Objektklasse deklariert werden.
Funktionale Schnittstellen werden auch als Single Abstract Method Interfaces (SAM Interfaces) bezeichnet.
Weitere Informationen und Beispiele: klicken Sie hier
Optional
Java hat in Java 8 eine neue Klasse Optional eingeführt. Es handelt sich um eine öffentliche Abschlussklasse, die zur Behandlung von NullPointerException in Java-Anwendungen verwendet wird. Wir müssen importieren java.util Paket, um diese Klasse zu verwenden. Es bietet Methoden zum Überprüfen des Vorhandenseins eines Werts für eine bestimmte Variable.
Weitere Informationen und Beispiele: klicken Sie hier
für jede
Java bietet eine neue Methode forEach() zum Iterieren der Elemente. Es ist in Iterable- und Stream-Schnittstellen definiert.
Es handelt sich um eine Standardmethode, die in der Iterable-Schnittstelle definiert ist. Sammlungsklassen, die die Iterable-Schnittstelle erweitern, können die Methode forEach() zum Iterieren von Elementen verwenden.
Diese Methode benötigt einen einzelnen Parameter, der eine funktionale Schnittstelle darstellt. Sie können also den Lambda-Ausdruck als Argument übergeben.
Weitere Informationen und Beispiele: klicken Sie hier
Datum/Uhrzeit-API
Java hat seit Java 8 eine neue Datums- und Uhrzeit-API eingeführt. Das Paket java.time enthält Java 8-Datums- und Uhrzeitklassen.
Weitere Informationen und Beispiele: klicken Sie hier
Standardmethoden
Java bietet die Möglichkeit, Standardmethoden innerhalb der Schnittstelle zu erstellen. Methoden, die innerhalb der Schnittstelle definiert und mit dem Schlüsselwort „default“ gekennzeichnet sind, werden als Standardmethoden bezeichnet. Diese Methoden sind nicht abstrakte Methoden und können einen Methodenkörper haben.
Weitere Informationen und Beispiele finden Sie hier
Nashorn JavaScript Engine
Nashorn ist eine JavaScript-Engine. Es wird verwendet, um JavaScript-Code dynamisch auf der JVM (Java Virtual Machine) auszuführen. Java bietet ein Befehlszeilentool usw welches zum Ausführen von JavaScript-Code verwendet wird.
Sie können JavaScript-Code auf zwei Arten ausführen:
- Verwenden des jjs-Befehlszeilentools und
- Durch Einbettung in Java-Quellcode.
Weitere Informationen und Beispiele finden Sie hier
StringJoiner
Java hat im Paket java.util eine neue finale Klasse StringJoiner hinzugefügt. Es wird verwendet, um eine durch ein Trennzeichen getrennte Folge von Zeichen zu erstellen. Jetzt können Sie eine Zeichenfolge erstellen, indem Sie Trennzeichen wie Komma(,), Bindestrich(-) usw. übergeben.
3D in Autocad
Weitere Informationen und Beispiele finden Sie hier
Sammler
Collectors ist eine letzte Klasse, die die Object-Klasse erweitert. Es bietet Reduktionsoperationen, wie z. B. das Sammeln von Elementen in Sammlungen, das Zusammenfassen von Elementen nach verschiedenen Kriterien usw.
Weitere Informationen und Beispiele: klicken Sie hier
Stream-API
Das Java 8-Paket java.util.stream besteht aus Klassen, Schnittstellen und einer Aufzählung, um funktionale Operationen an den Elementen zu ermöglichen. Es führt eine verzögerte Berechnung durch. Es wird also nur dann ausgeführt, wenn es erforderlich ist.
Weitere Informationen und Beispiele: klicken Sie hier
Stream-Filter
Java Stream bietet eine Methode filter() zum Filtern von Stream-Elementen auf der Grundlage eines bestimmten Prädikats. Angenommen, Sie möchten nur gerade Elemente Ihrer Liste erhalten, können Sie dies einfach mit Hilfe der Methode filter() tun.
Diese Methode verwendet ein Prädikat als Argument und gibt einen Strom von Ergebniselementen zurück.
Weitere Informationen und Beispiele: klicken Sie hier
Java Base64-Kodierung und -Dekodierung
Java bietet eine Base64-Klasse für die Ver- und Entschlüsselung. Sie müssen die Klasse java.util.Base64 in Ihre Quelldatei importieren, um ihre Methoden verwenden zu können.
Diese Klasse bietet drei verschiedene Encoder und Decoder zum Verschlüsseln von Informationen auf jeder Ebene.
Weitere Informationen und Beispiele: klicken Sie hier
Java-Parallel-Array-Sortierung
Java bietet eine neue zusätzliche Funktion in der Arrays-Klasse, die zum parallelen Sortieren von Array-Elementen verwendet wird. Die Methode parallelSort() wurde zur Klasse java.util.Arrays hinzugefügt, die den gemeinsamen JSR 166 Fork/Join-Parallelitätspool verwendet, um die Sortierung von Arrays bereitzustellen. Es handelt sich um eine überladene Methode.
Weitere Informationen und Beispiele finden Sie hier
Java 8-Sicherheitsverbesserungen
1) Der Java Secure Socket Extension (JSSE)-Anbieter aktiviert auf der Clientseite standardmäßig die Protokolle Transport Layer Security (TLS) 1.1 und TLS 1.2.
2) Es wurde eine verbesserte Methode AccessController.doPrivileged hinzugefügt, die es Code ermöglicht, eine Teilmenge seiner Privilegien geltend zu machen, ohne die vollständige Durchquerung des Stapels zur Überprüfung auf andere Berechtigungen zu verhindern.
3) Advanced Encryption Standard (AES) und Password-Based Encryption (PBE)-Algorithmen wie PBEWithSHA256AndAES_128 und PBEWithSHA512AndAES_256 wurden dem SunJCE-Anbieter hinzugefügt.
4) Java Secure Socket Extension (SunJSSE) hat in JDK 7 standardmäßig die Server Name Indication (SNI)-Erweiterung für Clientanwendungen aktiviert und JDK 8 unterstützt die SNI-Erweiterung für Serveranwendungen. Die SNI-Erweiterung ist eine Funktion, die die SSL/TLS-Protokolle erweitert, um anzugeben, mit welchem Servernamen der Client während des Handshakes eine Verbindung herzustellen versucht.
5) SunJSSE wurde erweitert, um AEAD-Algorithmen (Authenticated Encryption with Associated Data) zu unterstützen. Der Java Cryptography Extension (SunJCE)-Anbieter wurde erweitert, um die AES/GCM/NoPadding-Verschlüsselungsimplementierung sowie Galois/Counter Mode (GCM)-Algorithmusparameter zu unterstützen.
6) Ein neues Befehlsflag -importpassword wird dem Dienstprogramm keytool hinzugefügt. Es dient dazu, ein Passwort zu akzeptieren und es sicher als geheimen Schlüssel zu speichern. Klassen wie java.security.DomainLoadStoreParameter und java.security.PKCS12Attribute werden hinzugefügt, um den DKS-Keystore-Typ zu unterstützen.
7) In JDK 8 wurden die kryptografischen Algorithmen um die SHA-224-Variante der SHA-2-Familie von Message-Digest-Implementierungen erweitert.
8) Erweiterte Unterstützung für NSA Suite B-Kryptografie, einschließlich:
- OID-Registrierung für NSA Suite B-Kryptographiealgorithmen
- Unterstützung für die Generierung von 2048-Bit-DSA-Schlüsselpaaren und zusätzliche Signaturalgorithmen für 2048-Bit-DSA-Schlüssel wie SHA224withDSA und SHA256withDSA.
- Aufhebung der Schlüsselgrößenbeschränkung von 1024 auf 2048 für den Diffie-Hellman (DH)-Algorithmus.
9) Die SecureRandom-Klasse ermöglicht die Generierung kryptografisch starker Zufallszahlen, die für private oder öffentliche Schlüssel, Chiffren und signierte Nachrichten verwendet werden. Die Methode getInstanceStrong() wurde in JDK 8 eingeführt, die eine Instanz des stärksten SecureRandom zurückgibt. Es sollte verwendet werden, wenn Sie einen privaten und öffentlichen RSA-Schlüssel erstellen müssen. SecureRandom beinhaltet folgende weitere Änderungen:
- Für UNIX-Plattformen wurden zwei neue Implementierungen eingeführt, die blockierendes und nicht blockierendes Verhalten ermöglichen.
10) Eine neue PKIXRevocationChecker-Klasse ist enthalten, die den Sperrstatus von Zertifikaten mit dem PKIX-Algorithmus überprüft. Es unterstützt die Best-Effort-Prüfung, die Prüfung von Endentitätszertifikaten und mechanismusspezifische Optionen.
11) Die Public Key Cryptography Standards 11 (PKCS) wurden um 64-Bit-Unterstützung für Windows erweitert.
12) Zwei neue Rcache-Typen werden zu Kerberos 5 hinzugefügt. Der Typ „none“ bedeutet überhaupt kein Rcache, und der Typ „dfl“ bedeutet den dateibasierten Rcache im DFL-Stil. Außerdem wird jetzt der vom Akzeptor angeforderte Unterschlüssel unterstützt. Sie werden mithilfe der Systemeigenschaften sun.security.krb5.rcache und sun.security.krb5.acceptor.subkey konfiguriert.
13) In JDK 8 werden der Übergang des Kerberos 5-Protokolls und die eingeschränkte Delegation im selben Bereich unterstützt.
14) Java 8 hat die schwache Verschlüsselung standardmäßig deaktiviert. Die DES-bezogenen Kerberos 5-Verschlüsselungstypen werden standardmäßig nicht unterstützt. Diese Verschlüsselungstypen können durch Hinzufügen von „allow_weak_crypto=true“ in der Datei krb5.conf aktiviert werden.
15) Sie können den Servernamen auf Null setzen, um einen ungebundenen Server zu kennzeichnen. Dies bedeutet, dass ein Client den Dienst unter einem beliebigen Servernamen anfordern kann. Nachdem ein Kontext eingerichtet wurde, kann der Server den Namen als ausgehandelte Eigenschaft mit dem Schlüsselnamen SASL.BOUND_SERVER_NAME abrufen.
16) Die Java Native Interface (JNI)-Brücke zum nativen Java Generic Security Service (JGSS) wird jetzt unter Mac OS X unterstützt. Sie können die Systemeigenschaft sun.security.jgss.native auf true setzen, um sie zu aktivieren.
17) Eine neue Systemeigenschaft, jdk.tls.ephemeralDHKeySize, wird definiert, um die Größen der kurzlebigen DH-Schlüssel anzupassen. Die minimal akzeptable DH-Schlüsselgröße beträgt 1024 Bit, außer für exportierbare Verschlüsselungssammlungen oder den Legacy-Modus (jdk.tls.ephemeralDHKeySize=legacy).
18) Der Java Secure Socket Extension (JSSE)-Anbieter berücksichtigt standardmäßig die Cipher-Suite-Präferenz des Clients. Das Verhalten kann jedoch geändert werden, um die Cipher-Suite-Präferenz des Servers zu berücksichtigen, indem SSLParameters.setUseCipherSuitesOrder(true) über den Server aufgerufen wird.
Verbesserungen der Java 8-Tools
1) Ein jjs-Befehl wird eingeführt, der die Nashorn-Engine entweder im interaktiven Shell-Modus oder zur Interpretation von Skriptdateien aufruft.
2) Der Java-Befehl ist in der Lage, JavaFX-Anwendungen zu starten, vorausgesetzt, die JavaFX-Anwendung ist korrekt verpackt.
3) Die Java-Befehlsmanpage (sowohl nroff als auch HTML) wurde komplett überarbeitet. Die erweiterten Optionen sind nun entsprechend dem Bereich, den sie betreffen, in Runtime, Compiler, Garbage Collection und Serviceability unterteilt. Einige bisher fehlende Optionen werden nun beschrieben. Es gibt auch einen Abschnitt für Optionen, die seit der vorherigen Version veraltet oder entfernt wurden.
4) Das neue jdeps-Befehlszeilentool ermöglicht es dem Entwickler, Klassendateien zu analysieren, um Abhängigkeiten auf Paket- oder Klassenebene zu ermitteln.
5) Sie können aus der Ferne auf Diagnosebefehle zugreifen, auf die zuvor nur lokal über das jcmd-Tool zugegriffen werden konnte. Der Fernzugriff wird über die Java Management Extensions (JMX) bereitgestellt, sodass Diagnosebefehle einem Plattform-MBean zugänglich gemacht werden, der beim Plattform-MBean-Server registriert ist. Das MBean ist die com.sun.management.DiagnosticCommandMBean-Schnittstelle.
6) Eine neue Option -tsapolicyid ist im Jarsigner-Tool enthalten, mit der Sie einen signierten Zeitstempel von einer Zeitstempelbehörde anfordern und ihn an eine signierte JAR-Datei anhängen können.
7) Eine neue Methode java.lang.reflect.Executable.getParameters ist enthalten, die Ihnen den Zugriff auf die Namen der formalen Parameter jeder Methode oder jedes Konstruktors ermöglicht. Allerdings speichern .class-Dateien standardmäßig keine formalen Parameternamen. Um formale Parameternamen in einer bestimmten .class-Datei zu speichern und so der Reflection-API das Abrufen formaler Parameternamen zu ermöglichen, kompilieren Sie die Quelldatei mit der Option -parameters des Javac-Compilers.
8) Die Typregeln für binäre Vergleiche in Abschnitt 15.21 der Java Language Specification (JLS) werden jetzt von javac korrekt erzwungen.
9) In dieser Version wurden das apt-Tool und die zugehörige API, die im Paket com.sun.mirror enthalten sind, entfernt.
Javadoc-Verbesserungen
In Java SE 8 wurden dem Javadoc-Tool die folgenden neuen APIs hinzugefügt.
- Eine neue DocTree-API führt einen Scanner ein, der es Ihnen ermöglicht, Quellcode zu durchlaufen, der durch einen abstrakten Syntaxbaum dargestellt wird. Dadurch wird die Compiler Tree API erweitert, um einen strukturierten Zugriff auf den Inhalt von Javadoc-Kommentaren zu ermöglichen.
- Das Paket javax.tools enthält Klassen und Schnittstellen, die es Ihnen ermöglichen, das Javadoc-Tool direkt aus einer Java-Anwendung aufzurufen, ohne einen neuen Prozess auszuführen.
- Der Abschnitt „Methodenzusammenfassung“ der generierten Dokumentation einer Klasse oder Schnittstelle wurde neu strukturiert. Die Methodenbeschreibungen in diesem Abschnitt sind nach Typ gruppiert. Standardmäßig werden alle Methoden aufgelistet. Sie können auf eine Registerkarte klicken, um Methoden eines bestimmten Typs anzuzeigen (statisch, Instanz, abstrakt, konkret oder veraltet, sofern sie in der Klasse oder Schnittstelle vorhanden sind).
- Das Javadoc-Tool unterstützt jetzt die Überprüfung des Inhalts von Javadoc-Kommentaren auf Probleme, die zu verschiedenen Problemen wie ungültigem HTML oder Barrierefreiheitsproblemen in den von Javadoc generierten Dateien führen können. Die Funktion ist standardmäßig aktiviert und kann auch über die neue Option -Xdoclint gesteuert werden.
Pack200-Verbesserungen
Das Java-Klassendateiformat wurde aufgrund von JSR 292 aktualisiert, das dynamisch typisierte Sprachen auf der Java-Plattform unterstützt.
Die Pack200-Engine wurde aktualisiert, um sicherzustellen, dass Java SE 8-Klassendateien effektiv komprimiert werden. Jetzt kann es konstante Pooleinträge und neue Bytecodes erkennen, die durch JSR 292 eingeführt wurden. Daher sind komprimierte Dateien, die mit dieser Version des pack200-Tools erstellt wurden, nicht mit älteren Versionen des unpack200-Tools kompatibel.
Java 8 I/O-Verbesserungen
In Java 8 gibt es mehrere Verbesserungen an den java.nio.charset.Charset- und erweiterten Zeichensatzimplementierungen. Es beinhaltet Folgendes:
- Ein neuer SelectorProvider, der die Leistung oder Skalierbarkeit des Servers verbessern kann. Der /dev/poll SelectorProvider ist weiterhin der Standard. Um den Solaris-Ereignisportmechanismus zu verwenden, führen Sie die Ausführung mit der Systemeigenschaft java.nio.channels.spi.Selector aus, die auf den Wert sun.nio.ch.EventPortSelectorProvider eingestellt ist.
- Die Größe der Datei /jre/lib/charsets.jar wurde verringert.
- Die Leistung des Konstruktors java.lang.String(byte[], ∗) und der Methode java.lang.String.getBytes() wurde verbessert.
Verbesserungen des Java 8-Netzwerks
1) Eine neue Klasse java.net.URLPermission wurde hinzugefügt. Es stellt eine Berechtigung für den Zugriff auf eine durch eine bestimmte URL definierte Ressource dar.
2) Ein Paket jdk.net wurde hinzugefügt, das plattformspezifische Socket-Optionen und einen Mechanismus zum Festlegen dieser Optionen für alle Standard-Socket-Typen enthält. Die Socket-Optionen sind in jdk.net.ExtendedSocketOptions definiert.
3) Wenn in der Klasse HttpURLConnection ein Sicherheitsmanager installiert ist und eine Methode aufgerufen wird, die zu einem Versuch führt, eine Verbindung zu öffnen, muss der Aufrufer entweder über eine „connect“SocketPermission für die Host/Port-Kombination der Ziel-URL verfügen oder eine URLPermission, die diese Anfrage zulässt.
Wenn die automatische Umleitung aktiviert ist und diese Anfrage an ein anderes Ziel umgeleitet wird, muss der Anrufer auch die Berechtigung haben, eine Verbindung zum umgeleiteten Host/der umgeleiteten URL herzustellen.
Verbesserungen der Java 8-Parallelität
Das Paket java.util.concurrent fügte zwei neue Schnittstellen und vier neue Klassen hinzu.
Java.util.concurrent-Schnittstellen
Schnittstelle | Beschreibung |
---|---|
öffentliche statische Schnittstelle CompletableFuture.AsynchronousCompletionTask | Es handelt sich um eine Markierungsschnittstelle, die zur Identifizierung asynchroner Aufgaben verwendet wird, die durch asynchrone Methoden erzeugt werden. Es kann zum Überwachen, Debuggen und Verfolgen asynchroner Aktivitäten nützlich sein. |
öffentliche Schnittstelle CompletionStage | Es erstellt eine Phase einer möglicherweise asynchronen Berechnung, die eine Aktion ausführt oder einen Wert berechnet, wenn eine andere CompletionStage abgeschlossen ist. |
Java.util.concurrent-Klassen
Klasse | Beschreibung |
---|---|
Die öffentliche Klasse CompletableFuture erweitert das Objekt und implementiert Future und CompletionStage | Es handelt sich um eine Zukunft, die explizit abgeschlossen werden kann und als CompletionStage verwendet werden kann, die abhängige Funktionen und Aktionen unterstützt, die bei ihrer Fertigstellung ausgelöst werden. |
Die öffentliche statische Klasse ConcurrentHashMap.KeySetView erweitert Object implementiert Set, Serializable | Es handelt sich um eine Ansicht einer ConcurrentHashMap als Schlüsselsatz, in dem Ergänzungen optional durch Zuordnung zu einem gemeinsamen Wert aktiviert werden können. |
Die öffentliche abstrakte Klasse CountedCompleter erweitert ForkJoinTask | Eine ForkJoinTask mit einer Abschlussaktion, die beim Auslösen ausgeführt wird und bei der keine verbleibenden Aktionen ausstehen. |
Die öffentliche Klasse CompletionException erweitert RuntimeException | Es löst eine Ausnahme aus, wenn beim Abschließen eines Ergebnisses oder einer Aufgabe ein Fehler oder eine andere Ausnahme auftritt. |
Neue Methoden in der Klasse java.util.concurrent.ConcurrentHashMap
Die ConcurrentHashMap-Klasse führt in ihrer neuesten Version mehrere neue Methoden ein. Es umfasst verschiedene forEach-Methoden (forEach, forEachKey, forEachValue und forEachEntry), Suchmethoden (search, searchKeys, searchValues und searchEntries) und eine große Anzahl von Reduktionsmethoden (reduce, ReduceToDouble, ReduceToLong usw.). Weitere verschiedene Methoden (mappingCount und newKeySet) wurden ebenfalls hinzugefügt.
Neue Klassen in java.util.concurrent.atomic
Die neueste Version führt skalierbare, aktualisierbare Variablenunterstützung durch eine kleine Reihe neuer Klassen DoubleAccumulator, DoubleAdder, LongAccumulator und LongAdder ein. Es verwendet intern Techniken zur Konfliktreduzierung, die im Vergleich zu Atomic-Variablen enorme Durchsatzverbesserungen ermöglichen.
Klasse | Beschreibung |
---|---|
Die öffentliche Klasse DoubleAccumulator erweitert Number und implementiert Serializable | Es wird für eine oder mehrere Variablen verwendet, die zusammen einen laufenden Double-Wert beibehalten, der mithilfe einer bereitgestellten Funktion aktualisiert wird. |
Die öffentliche Klasse DoubleAdder erweitert Number implementiert Serializable | Es wird für eine oder mehrere Variablen verwendet, die zusammen eine anfängliche Doppelsumme von Null beibehalten. |
Die öffentliche Klasse LongAccumulator erweitert Number und implementiert Serializable | Es wird für eine oder mehrere Variablen verwendet, die zusammen einen laufenden Long-Wert verwalten, der mithilfe einer bereitgestellten Funktion aktualisiert wird. |
Die öffentliche Klasse LongAdder erweitert Number implementiert Serializable | Es wird für eine oder mehrere Variablen verwendet, die zusammen eine anfänglich Null-Langsumme beibehalten. |
Neue Methoden in der Klasse java.util.concurrent.ForkJoinPool
Diese Klasse hat zwei neue Methoden getCommonPoolParallelism() und commonPool() hinzugefügt, die den angestrebten Parallelitätsgrad des Common Pools bzw. der Common Pool-Instanz zurückgeben.
Methode | Beschreibung |
---|---|
öffentlicher statischer ForkJoinPool commonPool() | Es gibt die Common-Pool-Instanz zurück. |
Öffentliches statisches int getCommonPoolParallelism() | Es gibt den angestrebten Parallelitätsgrad des gemeinsamen Pools zurück. |
Neue Klasse java.util.concurrent.locks.StampedLock
Es wird eine neue Klasse StampedLock hinzugefügt, die zum Hinzufügen einer funktionsbasierten Sperre mit drei Modi zur Steuerung des Lese-/Schreibzugriffs (Schreiben, Lesen und optimistisches Lesen) verwendet wird. Diese Klasse unterstützt auch Methoden, die bedingt Konvertierungen über die drei Modi hinweg bereitstellen.
Anmerkungen zum Spring Boot
Klasse | Beschreibung |
---|---|
Die öffentliche Klasse StampedLock erweitert Object und implementiert Serializable | Diese Klasse stellt eine funktionsbasierte Sperre mit drei Modi zur Steuerung des Lese-/Schreibzugriffs dar. |
Java API für XML-Verarbeitung (JAXP) 1.6 Verbesserungen
In Java 8 wird die Java API für XML Processing (JAXP) 1.6 hinzugefügt. Es erfordert die Verwendung der Dienstanbieter-Ladefunktion, die durch java.util.ServiceLoader definiert wird, um Dienste aus Dienstkonfigurationsdateien zu laden.
Der Grund dafür besteht darin, eine zukünftige Modularisierung der Java SE-Plattform zu ermöglichen, bei der Dienstanbieter mit anderen Mitteln als JAR-Dateien und möglicherweise ohne Dienstkonfigurationsdateien bereitgestellt werden können.
Verbesserungen der Java Virtual Machine
Die Überprüfung von invokespecial-Anweisungen wurde verschärft, sodass nur eine Instanzinitialisierungsmethode in der aktuellen Klasse oder ihrer direkten Superklasse aufgerufen werden darf.
Java Mission Control 5.3 ist in Java 8 enthalten
Java Mission Control (JMC) ist ein fortschrittlicher Satz von Tools, der eine effiziente und detaillierte Datenanalyse ermöglicht und eine erweiterte, unaufdringliche Java-Überwachung und -Verwaltung bietet. JMC bietet Abschnitte für allgemeine Analysebereiche wie Codeleistung, Speicher und Latenz.
Babel-Sprachpakete in Japanisch und vereinfachtem Chinesisch sind jetzt standardmäßig in Java Mission Control enthalten, das im JDK 8 enthalten ist.
Verbesserungen bei der Java 8-Internationalisierung
1) Unicode-Verbesserungen
Das JDK 8 beinhaltet Unterstützung für Unicode 6.2.0. Es enthält die folgenden Funktionen.
- 733 neue Zeichen inklusive türkischem Lira-Zeichen.
- 7 neue Skripte:
- Meroitische Hieroglyphen
- Meroitische Kursivschrift
- Sora Sompeng
- Chakma
- Sharada
- Takri
- Miao
- 11 neue Blöcke: darunter 7 Blöcke für die oben aufgeführten neuen Skripte und 4 Blöcke für die folgenden vorhandenen Skripte:
- Arabisch Extended-A
- Sundanesische Ergänzung
- Treffen mit Meek Extensions
- Arabische mathematische alphabetische Symbole
Übernahme von Unicode-CLDR-Daten und der Systemeigenschaft java.locale.providers
Das Unicode-Konsortium hat das Common Locale Data Repository (CLDR)-Projekt veröffentlicht, um „die Sprachen der Welt mit dem größten und umfangreichsten Standard-Repository für verfügbare Gebietsschemadaten zu unterstützen“. Der CLDR wird zum De-facto-Standard für Gebietsschemadaten. Die XML-basierten Gebietsschemadaten des CLDR wurden in die JDK 8-Version integriert, sind jedoch standardmäßig deaktiviert.
Es gibt vier verschiedene Quellen für Gebietsschemadaten:
- CLDR stellt die vom Unicode CLDR-Projekt bereitgestellten Gebietsschemadaten dar.
- HOST stellt die Anpassung der Einstellungen des zugrunde liegenden Betriebssystems durch den aktuellen Benutzer dar. Es funktioniert nur mit dem Standardgebietsschema des Benutzers und die anpassbaren Einstellungen können je nach Betriebssystem variieren, es werden jedoch hauptsächlich Datums-, Uhrzeit-, Zahlen- und Währungsformate unterstützt.
- SPI stellt die länderspezifischen Dienste dar, die in den installierten SPI-Anbietern implementiert sind.
- JRE stellt die Gebietsschemadaten dar, die mit den früheren JRE-Versionen kompatibel sind.
Um die gewünschte Gebietsschema-Datenquelle auszuwählen, verwenden Sie die Systemeigenschaft java.locale.providers. Auflistung der Datenquellen in der bevorzugten Reihenfolge. Beispiel: java.locale.providers=HOST,SPI,CLDR,JRE Das Standardverhalten entspricht der folgenden Einstellung: java.locale.providers=JRE,SPI
Java 8 Neue Kalender- und Gebietsschema-APIs
Das JDK 8 enthält zwei neue Klassen, mehrere neue Methoden und einen neuen Rückgabewert für eine vorhandene statische Methode.
Dem Paket java.util.spi werden zwei neue abstrakte Klassen für Dienstanbieter hinzugefügt.
Klasse | Beschreibung |
---|---|
Die öffentliche abstrakte Klasse CalendarDataProvider erweitert LocaleServiceProvider | Es handelt sich um eine abstrakte Klasse für Dienstanbieter, die gebietsschemaabhängige Kalenderparameter bereitstellen. |
Die öffentliche abstrakte Klasse CalendarNameProvider erweitert LocaleServiceProvider | Es handelt sich um eine abstrakte Klasse für Dienstanbieter, die lokalisierte Zeichenfolgendarstellungen (Anzeigenamen) von Kalenderfeldwerten bereitstellen. |
Eine statische Methode ist jetzt in der Lage, Locale.UNICODE_LOCALE_EXTENSION für das Nummerierungssystem zu erkennen.
Methode | Beschreibung |
---|---|
public static final DecimalFormatSymbols getInstance(Locale locale) | Es wird verwendet, um die DecimalFormatSymbols-Instanz für das angegebene Gebietsschema abzurufen. Diese Methode bietet Zugriff auf DecimalFormatSymbols-Instanzen für Gebietsschemas, die von der Java-Laufzeit selbst unterstützt werden, sowie für diejenigen, die von installierten DecimalFormatSymbolsProvider-Implementierungen unterstützt werden. Es löst eine NullPointerException aus, wenn das Gebietsschema null ist. |
Neue Methoden in der Kalender-API hinzugefügt:
Methode | Beschreibung |
---|---|
öffentlicher boolescher Wert isSupportedLocale(Gebietsschema) | Es gibt „true“ zurück, wenn das angegebene Gebietsschema von diesem Gebietsschema-Dienstanbieter unterstützt wird. Das angegebene Gebietsschema kann Erweiterungen enthalten, die bei der Unterstützungsbestimmung berücksichtigt werden sollten. Es ist in der Klasse java.util.spi.LocaleServiceProvider definiert |
öffentlicher String getCalendarType() | Es gibt den Kalendertyp dieses Kalenders zurück. Kalendertypen werden durch die Unicode Locale Data Markup Language (LDML)-Spezifikation definiert. Es ist in der Klasse java.util.Calendar definiert. |
Für die Methoden Calendar.getDisplayName und Calendar.getDisplayNames werden neue Stilspezifizierer hinzugefügt, um das Format des Kalendernamens zu bestimmen.
Spezifizierer | Beschreibung |
---|---|
öffentliches statisches finales int SHORT_FORMAT | Es handelt sich um einen Stilbezeichner für getDisplayName und getDisplayNames, der einen für das Format verwendeten Kurznamen angibt. |
öffentliches statisches finales int LONG_FORMAT | Es handelt sich um einen Stilbezeichner für getDisplayName und getDisplayNames, der einen langen Namen angibt, der für das Format verwendet wird. |
öffentliches statisches finales int SHORT_STANDALONE | Es handelt sich um einen Stilbezeichner für getDisplayName und getDisplayNames, der einen Kurznamen angibt, der unabhängig voneinander verwendet wird, beispielsweise eine Monatsabkürzung als Kalenderüberschrift. |
öffentliches statisches finales int LONG_STANDALONE | Es handelt sich um einen Stilbezeichner für getDisplayName und getDisplayNames, der einen langen Namen angibt, der unabhängig voneinander verwendet wird, beispielsweise einen Monatsnamen als Kalenderüberschriften. |
Zwei neue Locale-Methoden für den Umgang mit den (optionalen) Erweiterungen eines Gebietsschemas.
Methode | Beschreibung |
---|---|
öffentlicher boolescher Wert hasExtensions() | Es gibt „true“ zurück, wenn dieses Gebietsschema Erweiterungen hat. |
öffentliches Gebietsschema stripExtensions() | Es wird eine Kopie dieses Gebietsschemas ohne Erweiterungen zurückgegeben. Wenn dieses Gebietsschema keine Erweiterungen hat, wird dieses Gebietsschema selbst zurückgegeben. |
Zwei neue Locale.filter-Methoden geben eine Liste von Locale-Instanzen zurück, die den angegebenen Kriterien entsprechen, wie in RFC 4647 definiert:
Methode | Beschreibung |
---|---|
öffentlicher statischer Listenfilter (Listenprioritätsliste, Sammlungsgebietsschemas) | Es gibt eine Liste übereinstimmender Locale-Instanzen unter Verwendung des in RFC 4647 definierten Filtermechanismus zurück. Dies entspricht filter(List, Collection, FilteringMode), wenn der Modus Locale.FilteringMode.AUTOSELECT_FILTERING ist. |
öffentlicher statischer Listenfilter (Listenprioritätsliste, Sammlungsgebietsschemas, Locale.FilteringMode-Modus) | Es gibt eine Liste übereinstimmender Locale-Instanzen unter Verwendung des in RFC 4647 definierten Filtermechanismus zurück. |
Zwei neue Locale.filterTags-Methoden geben eine Liste von Sprach-Tags zurück, die den angegebenen Kriterien entsprechen, wie in RFC 4647 definiert.
Methode | Beschreibung |
---|---|
öffentliche statische ListenfilterTags (Listenprioritätsliste, Sammlungstags) | Es gibt eine Liste übereinstimmender Sprachtags unter Verwendung des in RFC 4647 definierten grundlegenden Filtermechanismus zurück. Dies entspricht filterTags(List, Collection, FilteringMode), wenn der Modus Locale.FilteringMode.AUTOSELECT_FILTERING ist. |
öffentliche statische Liste filterTags (Listenprioritätsliste, Sammlungs-Tags, Locale.FilteringMode-Modus) | Es gibt eine Liste übereinstimmender Sprach-Tags unter Verwendung des in RFC 4647 definierten grundlegenden Filtermechanismus zurück. |
Zwei neue Suchmethoden geben mithilfe des in RFC 4647 definierten Suchmechanismus das am besten passende Gebietsschema oder Sprach-Tag zurück.
Methode | Beschreibung |
---|---|
öffentliche statische Gebietsschemasuche (Listenprioritätsliste, Sammlungsgebietsschemas) | Mithilfe des in RFC 4647 definierten Suchmechanismus wird eine Locale-Instanz für das am besten passende Sprach-Tag zurückgegeben. |
Öffentlicher statischer String-LookupTag (Listenprioritätsliste, Sammlungs-Tags) | Mithilfe des in RFC 4647 definierten Suchmechanismus wird das am besten passende Sprachtag zurückgegeben. |
Weitere Verbesserungen der Java 8-Version
Verbesserungen im JDK 8u5
1) Die Häufigkeit, mit der die Sicherheitsabfragen für eine Anwendung angezeigt werden, wurde verringert.
js onclick
Verbesserungen im JDK 8u11
1) Eine Option zum Unterdrücken von Angeboten von Sponsoren, wenn die JRE installiert oder aktualisiert wird, ist auf der Registerkarte „Erweitert“ der Java-Systemsteuerung verfügbar.
2) Das Entry-Point-Attribut kann in das JAR-Dateimanifest eingefügt werden, um eine oder mehrere Klassen als gültigen Einstiegspunkt für Ihre RIA (Rich Internet Application) zu identifizieren.
Verbesserungen im JDK 8u20
1) Das javafxpackager-Tool wurde in javapackager umbenannt. Dieses Tool wurde um neue Argumente für eigenständige Anwendungsbundler erweitert.
Folgende Verbesserungen beziehen sich auf das Java-Tool:
- Eine experimentelle JIT-Compiler-Option im Zusammenhang mit Restricted Transactional Memory (RTM) wurde hinzugefügt.
- Es wurden mehrere Optionen im Zusammenhang mit der String-Deduplizierung hinzugefügt.
- Es wurden mehrere Optionen im Zusammenhang mit den intrinsischen Funktionen des Advanced Encryption Standard (AES) hinzugefügt.
- Kombinationen von Garbage-Collection-Optionen sind veraltet.
2) Garbage Collection Tuning Guide wurde zur Java HotSpot Virtual Machine hinzugefügt. Es beschreibt die in der Java HotSpot VM enthaltenen Garbage Collectors und hilft Ihnen bei der Entscheidung, welcher Garbage Collector die Leistung Ihrer Anwendung am besten optimieren kann, insbesondere wenn diese große Datenmengen (mehrere Gigabyte) verarbeitet, über viele Threads verfügt und hohe Transaktionsraten aufweist .
Verbesserungen im JDK 8u31
1) In dieser Version wurde das SSLv3-Protokoll aus den erweiterten Optionen der Java-Systemsteuerung entfernt.
Verbesserungen im JDK 8u40
Java-Tool
1) -XX:+CheckEndorsedAndExtDirs wurde hinzugefügt, da der Überschreibungsmechanismus für empfohlene Standards (JDK-8065675) und der Erweiterungsmechanismus (JDK-8065702) veraltet sind. Die Option hilft bei der Identifizierung vorhandener Verwendungen dieser Mechanismen und wird in JDK 7u80 und JDK 8u40 unterstützt.
2) Java Flight Recorder (JFR) bietet verschiedene Möglichkeiten, kommerzielle Funktionen freizuschalten und JFR während der Laufzeit einer Anwendung zu aktivieren.
Es umfasst Java-Befehlszeilenoptionen wie jcmd-Diagnosebefehle und grafische Benutzeroberflächen (GUI)-Steuerelemente innerhalb von Java Mission Control. Diese Flexibilität ermöglicht es Ihnen, beim Start die entsprechenden Optionen bereitzustellen oder später mit JFR zu interagieren.
3) Die Option -XX:StartFlightRecording=parameter=value verfügt über einen neuen Parameter, dumponexit=true, der angibt, ob eine Dump-Datei mit JFR-Daten generiert werden soll, wenn die JVM auf kontrollierte Weise beendet wird.
4) Die Optionen im Zusammenhang mit Restricted Transactional Memory (RTM) sind nicht mehr experimentell. Zu diesen Optionen gehören -XX:RTMAbortRatio=abort_ratio, -XX:RTMRetryCount=number_of_retries, -XX:+UseRTMDeopt und -XX:+UseRTMLocking.
5) In Java 8 wurde Application Class Data Sharing (AppCDS) eingeführt. AppCDS erweitert CDS (Class Data Sharing), um die Platzierung von Klassen aus den Standarderweiterungsverzeichnissen und dem Anwendungsklassenpfad im gemeinsam genutzten Archiv zu ermöglichen. Dies ist eine kommerzielle Funktion und gilt nicht mehr als experimentell.
6) Neue Optionen -XX:+ResourceManagement und -XX:ResourceManagementSampleInterval=value wurden hinzugefügt.
7) Zusätzliche Informationen zu großen Seiten wurden hinzugefügt. Große Seiten, auch riesige Seiten genannt, sind Speicherseiten, die deutlich größer sind als die Standardspeicherseitengröße. Große Seiten optimieren die Translation-Lookaside-Puffer des Prozessors. Die Linux-Optionen -XX:+UseHugeTLBFS, -XX:+UseSHM und -XX:+UseTransparentHugePages wurden dokumentiert.
8) Die Option -XX:ObjectAlignmentInBytes=alignment wurde dokumentiert.
JJS-Tool
1) Die Option --optimistic-types=[true|false] wurde hinzugefügt. Es aktiviert oder deaktiviert optimistische Typannahmen mit deoptimierender Neukompilierung.
2) Die Option --lingual=[es5] wurde dem jjs-Tool hinzugefügt. Es gibt die ECMAScript-Sprachversion an.
Javapackager-Tool
1) Neue Argumente sind für OS X-Bundler verfügbar. Das Argument mac.CFBundleVersion identifiziert die zu verwendende interne Versionsnummer.
2) Das Argument mac.dmg.simple gibt an, ob DMG-Anpassungsschritte, die von der Ausführung von AppleScript-Code abhängen, übersprungen werden.
Jcmd-Tool
Das Jcmd-Tool wird zur dynamischen Interaktion mit Java Flight Recorder (JFR) verwendet. Sie können damit kommerzielle Funktionen freischalten, Flugaufzeichnungen aktivieren/starten/stoppen und verschiedene Statusmeldungen vom System erhalten.
Jstat-Tool
Das jstat-Tool wurde mit Informationen zum komprimierten Klassenraum aktualisiert, der ein besonderer Teil des Metaraums ist.
Virtuelle Maschine
Die HotSpot-VM-Funktion „Scalable Native Memory Tracking“ hilft bei der Diagnose von VM-Speicherlecks und weist Benutzer darauf hin, wenn in der VM keine Speicherlecks vorhanden sind. Native Memory Tracker kann auf großen Systemen ohne Selbstabschaltung ausgeführt werden und verursacht keine nennenswerten Leistungseinbußen, die über das hinausgehen, was für kleine Programme als akzeptabel gilt.