Wichtige Funktionen von Java 10
[286] Local-Variable Type Inference – Ein Vorschlag zur Einführung des Schlüsselworts var in Java, wodurch die Notwendigkeit entfällt, den Typ einer lokalen Variablen explizit anzugeben. Das heißt, Sie können jetzt nicht den Typ der initialisierten Variablen angeben, sondern etwas schreiben wie:var list = new ArrayList<String>(); //перед нами ArrayList<String>
var stream = list.stream(); // перед нами Stream<String>
Dadurch entfällt die Duplizierung der ArrayList<String>-Typdefinition, die wir zuvor hätten verwenden müssen. Es ist interessant festzustellen, dass var kein Schlüsselwort wird, sondern ein reservierter Typ ist. Das heißt, Sie können var als Namen einer Variablen, Methode oder eines Pakets verwenden. Aber Sie können die Klasse nicht so benennen (was für ein Verlust!). [296] Zusammenführen der JDK-Gesamtstruktur in einem einzigen Repository . JDK 9 verfügt über acht Repositorys: Root, Corba, Hotspot, Jaxp, Jaxws, JDK, Langtools, Nashorn. In Java 10 wird diese gesamte Gesamtstruktur in einem einzigen Repository zusammengefasst, um die Durchführung von atomaren Commits über Repositorys mit voneinander abhängigen Änderungssätzen hinweg zu ermöglichen. [304] Die Garbage-Collector-Schnittstelle ist keine Schnittstelle, die von Entwicklern zur Steuerung der Garbage Collection verwendet werden kann. Stattdessen erhalten wir eine saubere Garbage-Collector-Schnittstelle im JVM-Quellcode, die es Ihnen ermöglicht, alternative Collectors schnell und einfach zu integrieren. Diejenigen, die davon geträumt haben, der JVM einen eigenen Garbage Collector hinzuzufügen, werden mit dieser Verbesserung am meisten zufrieden sein. [307] Paralleler vollständiger GC für den G1-Garbage Collector . In JDK 9 wurde G1 zum Standard-Garbage Collector, während zuvor Parallel GC der Standard-Garbage Collector war, der Müll über mehrere Threads hinweg sammeln konnte. Jetzt kann G1 dies auch tun; zuvor tat es dies in einem Thread, was manchmal zu Schwierigkeiten führte. Übrigens können Entwickler die Anzahl der Threads mithilfe des Parameters - XX:ParallelGCThreads.
[310] Application Class-Data Sharing konfigurieren . Diese in Java 10 übernommene Entwicklung bietet verbessertes Laden und Tracking und erweitert die vorhandene Class Sharing (CDS)-Funktion um zu ermöglichen, dass sich Anwendungsklassen im allgemeinen Archiv befinden. Class-Data Sharing oder kurz CDS funktioniert mit Dateien mit der Erweiterung *class. Mit dieser Funktion können Sie eine bestimmte Teilmenge von Klassen auswählen, verarbeiten und in ein spezielles Archiv komprimieren. All dies geschieht, um Speicherplatz zu sparen. Oft laden verschiedene Instanzen der JVM dieselben Klassen, die in der Standardbibliothek enthalten sind. Und CDS ermöglicht allen diesen JVM-Instanzen die gemeinsame Nutzung eines einzigen Archivs mit darin platzierten Klassen. Dies reduziert sowohl die Ladezeit des Programms als auch den Speicherverbrauch. Tatsächlich verbessert CDS ab Version 5 die JVM-Startleistung und reduziert den Ressourcenbedarf, wenn mehrere JVMs auf derselben physischen oder virtuellen Maschine ausgeführt werden. Früher war die Verwendung von CDS jedoch nur auf den Bootstrap-Loader beschränkt. Mit einer erweiterten Version namens Application CDS können Sie jetzt spezielle Archive mit Klassen für andere Loader laden. [312] Thread-Lokale Handshakes sind eine relativ einfache Änderung innerhalb der JVM, die es ermöglicht, Rückrufe über Threads hinweg auszuführen, ohne einen globalen VM-Sicherheitspunkt auszuführen. Auf diese Weise können Sie einzelne Threads kostenlos stoppen, anstatt alle auf einmal (oder gar keine). [313] Entfernen Sie das Native-Header-Generierungstool (javah) . Bereits in Java 9 begannen Sprachentwickler, unnötige Tools aktiv zu entfernen, und JEP 313 setzt diese gute Arbeit fort. Das Javah-Tool generiert JNI-Header, wenn der Code native Methoden enthält. Gesund? Natürlich, aber der native Javac-Compiler kann ab JDK 8 selbst JNI-Header generieren. Nun beschlossen sie, Javah loszuwerden. Derzeit wird übrigens das Panama- Projekt entwickelt , das insbesondere JNI ersetzen kann. [314] Zusätzliche Unicode-Sprach-Tag-Erweiterungen Diese Änderung soll die Klasse java.util.Locale und zugehörige APIs verbessern, um zusätzliche Unicode-Erweiterungen für BCP 47-Sprach-Tags zu implementieren. Insbesondere Tags für den Währungstyp (cu), Tag eins Es werden nun Wochen- (fw), Regions- (rg) und Zeitzonenüberschreibungen (tz) unterstützt. [316] Heap-Zuweisung auf alternativen Speichergeräten Diese Innovation wird denjenigen helfen, die andere Speichertypen als DRAM verwenden. Da sich die Technologien ständig ändern, ist die Verwendung von nichtflüchtigen Speichern mit der gleichen Schnittstelle und den gleichen Leistungsmerkmalen wie DRAM heute eine objektive Realität. Daher ermöglicht JEP 316 der JVM, einen Heap in anderen Speichertypen zu platzieren. [317] Experimenteller Java-basierter JIT-Compiler . Kürzlich wurde das Metropolis-Projekt angekündigt, das vorschlägt, den Großteil der JVM in Java neu zu schreiben. Falls Sie es nicht wussten: Die aktuelle Version ist in C++ geschrieben. Nun, wenn Sie sich bereits auskennen, wird Ihnen eine solche Idee zunächst wahrscheinlich seltsam vorkommen. Da die JVM in Java geschrieben ist, benötigen Sie nicht eine JVM, um die JVM auszuführen? Dies ist die Rekursion, die an einander gegenüberliegende Spiegel erinnert. Die Realität sieht jedoch etwas anders aus: Nur weil die JVM in Java geschrieben ist, heißt das nicht, dass Sie sie in Bytecodes kompilieren müssen. Sie können tatsächlich die AOT-Kompilierung verwenden und dann JIT den Code kompilieren, während er arbeitet, um die Leistung zu verbessern.
Zum Kompilieren von Java-Code wird üblicherweise ein Tool wie Javac verwendet. Es konvertiert ein Java-Programm in eine Reihe von Klassendateien mit Bytecodes. Als nächstes führt die JVM Ihren Bytecode aus und sein Interpreter wandelt ihn in Prozessoranweisungen um. Neben dem Interpreter verfügt die JVM auch über einen integrierten Compiler und kann aus Bytecode auch Anweisungen für den Prozessor erstellen. Dies ist die sogenannte Laufzeitkompilierung, die Kompilierung beim Start. Normalerweise wird der Code, der am häufigsten verwendet wird, einer solchen Kompilierung unterzogen – dies verbessert die Leistung. Der Compiler kann Aktionen auf unterschiedliche Weise ausführen: JIT-Kompilierung (Just-in-Time) – dynamisch, direkt während der Programmausführung, oder AOT-Kompilierung (Ahead-of-Time) – vor der Ausführung. Der jaotc AOT-Compiler wurde in JDK 9 eingeführt. Derzeit enthält die Hotspot-JVM zwei JIT-Compiler, C1 (für Geschwindigkeit) und C2 (für Optimierung). |
[1-9][0-9]*((\.0)*\.[1-9][0-9]*)*
Neue APIs
Es gibt 73 Ergänzungen zu den JDK 10-Standardklassenbibliotheken.-
java.awt.Toolkit
int getMenuShortcutKeyMaskEx ()
: Definiert, welche erweiterte Zusatztaste die entsprechende Zugriffstaste für das Kontextmenü ist. -
java.awt.geom.Path2D:
void trimToSize ()
: Reduziert die Kapazität dieser InstanzPath2D
auf ihre aktuelle Größe. Eine Anwendung kann diesen Vorgang verwenden, um den Pfadspeicher zu minimieren. Die gleiche Methode wurde den inneren KlassenPath2D.Double
und hinzugefügtPath2D.Float
. -
java.io.ByteArrayOutputStream:
String toString (Charset)
: überladentoString
, wandelt den Inhalt eines Puffers in eine Zeichenfolge um, indem die Bytes mit der angegebenen Kodierung dekodiert werden. -
java.io.PrintStream und lang.io.PrintWriter:
Beide Klassen verfügen über drei neue Konstruktoren, die ein zusätzliches Argument akzeptieren
charset
. -
java.io.Reader:
long transferTo (Writer)
: Liest alle Zeichen von diesem Reader und schreibt die Zeichen in der Reihenfolge, in der sie gelesen werden, an den angegebenen Writer. -
java.lang.Runtime.Version:
Vier neue Methoden, die einen ganzzahligen Wert für die neue Version ( JEP 322) von Zeichenfolgenfeldern zurückgeben:
feature ()
, und .interim ()
patch ()
update ()
-
java.lang.StackWalker.StackFrame:
-
String getDescriptor():
gibt ein Handle für die durch diesen Stapelrahmen dargestellte Methode zurück, wie in der Java Virtual Machine Specification definiert.
-
String getMethodType():
return
MethodType
stellt die Parametertypen und den Rückgabetyp für die durch den Stapelrahmen dargestellte Methode dar. -
java.lang.invoke.MethodType:
Klasse<?> LastParameterType(): Gibt den letzten Parametertyp dieses Methodentyps zurück. Wenn dieser Typ keine Parameter hat, wird stattdessen der Wert zurückgegeben
sentinel void.class
. -
java.lang.management.RuntimeMXBean:
long getPid ()
pid
gibt die laufende Java Virtual Machine zurück . -
java.lang.management.ThreadMXBean:
ThreadInfo [] dumpAllThreads (boolean, boolean, int):
gibt Thread-Informationen für alle Echtzeit-Threads mit einem Stack-Trace mit der angegebenen maximalen Anzahl von Elementen und Timing-Informationen zurück. -
ThreadInfo [] getThreadInfo (long [], boolean, boolean, int):
gibt Thread-Informationen für jeden Thread zurück, dessen Identifikation sich im Eingabearray befindet, mit einem Stack-Trace der angegebenen maximalen Anzahl von Elementen und Synchronisierungsinformationen.
-
java.lang.reflect.MalformedParameterizedTypeException:
Es wurde ein neuer Konstruktor hinzugefügt, der eine ausführliche Nachricht als Zeichenfolge als Parameter akzeptiert.
-
java.net.URLDecoder und java.net.URLEncoder:
Beide Klassen verfügen über neue überladene Decodierungs- und Codierungsmethoden, die
charset
als zusätzlicher Parameter verwendet werden. -
java.nio.channels.Channels:
Zwei neue statische überladene Methoden
newReader (ReadByteChannel, Charset)
undnewWriter (WriteByteChannel, Charset)
, mit denen Siecharset
. -
java.nio.file.FileStore:
long getBlockSize ()
: Gibt die Anzahl der Bytes pro Block in diesem Dateispeicher zurück. -
java.time.chrono:
три класса в этом пакете,
HijrahEra
,MiinguoEra
иThaiBuddhistEra
, получoder методString getDisplayName (TextStyle, Locale)
. Он возвращает текстовое Name, используемое для идентификации эпохи, подходящее для представления пользователю. -
java.time.format.DateTimeFormatter:
localizedBy (Locale)
: возвращает копию этого форматтера с локализованными значениями языка, календаря, региона, десятичного стиля и / oder часового пояса, которые заменяют значения в этом формате. -
java.util:
DoubleSummaryStatistics
,IntSummaryStatistics
иLongSummaryStatistics
получoder новый конструктор, который принимает четыре числовых значения. Он создает непустой экземпляр с указанным счетчиком, минимумом, максимумом и суммой. -
java.util.List, java.util.Map и java.util.Set:
каждый из этих интерфейсов обзавёлся новым статическим методом
copyOf (Collection)
. Они возвращают неизменяемыеList
,Map
oderSet
, содержащие элементы данной коллекции, в своем порядке итерации. -
java.util.Optional, java.util.OptionalDouble, java.util.OptionalInt, java.util.OptionalLong:
каждый из этих классов получает новый метод
orElseThrow ()
, который по существу делает то же самое, что иget ()
, то есть если Zustand выполняется, Bedeutung возвращается. В противном случае генерируется исключениеNoSuchElementException
. -
java.util.Formatter и java.util.Scanner:
Оба этих класса получoder три новых конструктора, которые на вход получают
charset
в дополнение к другим аргументам. -
java.util.Properties:
Здесь появился новый конструктор, который принимает аргумент
int
. Это создает пустой список свойств без значений по умолчанию и с начальным размером, содержащим указанное количество элементов без необходимости динамического изменения размера. Также появилась новая, перегруженная Ausführung методаreplace
, которая принимает три параметраObject
и возвращает логическое Bedeutung. -
java.SplittableRandom:
void nextBytes (byte [])
: заполняет предоставленный пользователем массив Byteов с генерируемыми псевдослучайными Byteами. -
java.util.concurrent.FutureTask:
добавлен метод
toString ()
, который возвращает строку, идентифицирующуюFutureTask
, а также ее состояние завершения. Состояние (в скобках) содержит одну из строк: «Completed Normally» (нормальное завершение), «Completed Exceptionally» (завершение с исключением), «Cancelled» (отменено) oder «Not completed» (не завершено). -
java.util.concurrent.locks.StampedLock:
новые методы
boolean isLockStamp (long)
,boolean isOptimisticReadStamp (long)
,boolean isReadLockStamp (long)
иboolean isWriteLockStamp (long)
. -
java.jar.JarEntry:
String getRealName ()
: возвращает настоящее Name этогоJarEntry
. ЕслиJarEntry
является записью мультирелизного jar-Datei, настроенного для обработки, тогда Name, возвращаемое этим методом — Name пути версии, которую представляетJarEntry
. ИначеJarEntry
возвращает то же Name, что иZipEntry.getName ()
. -
java.util.jar.JarFile:
Stream <JarEntry> versionedStream ()
: возвращает поток записей в файле с версией jar. Подобно методуgetRealName
дляJarEntry
, связан с мультирелизными jar-Dateiми. -
java.util.spi.LocaleNameProvider:
getDisplayUnicodeExtensionKey (String, Locale)
: Gibt den lokalisierten Namen dafür zurückUnicode extension key
.getDisplayUnicodeExtensionType (String, String, Locale)
: Gibt den lokalisierten Namen dafür zurückUnicode extension key
. -
java.util.stream.Collectors:
toUnmodifiableList ()
,toUnmodifiableSet ()
,toUnmodifiableMap (Function, Function)
,toUnmodifiableMap (Function, Function, BinaryOperator)
– Diese vier neuen Methoden geben Collectors zurück, die die Eingabeelemente in einer entsprechenden nicht änderbaren Sammlung sammeln. -
java.lang.model.SourceVersion:
Dies ist jetzt ein RELEASE_10-Feld zur Darstellung der JDK 10-Version.
-
java.lang.model.util.TypeKindVisitor6 und javax.lang.model.util.TypeKindVisitor9:
etwas nicht ganz klar :).
-
R visitNoTypeAsModule(NoType, P):
Besuche Pseudotyp
MODULE
. -
javax.remote.management.rmi.RMIConnectorServer:
Dieser Klasse wurden zwei Felder hinzugefügt:
CREDENTIALS_FILTER_PATTERN и SERIAL_FILTER_PATTERN
. -
javax.ButtonModel:
Ratet mal, Swing wird immer noch aktualisiert!
-
ButtonGroup getGroup():
gibt die Gruppe zurück, zu der die Schaltfläche gehört. Wird normalerweise mit verwendet
radio buttons
, die sich innerhalb ihrer Gruppe gegenseitig ausschließen. -
javax.plaf.basic.BasicMenuUI:
Dimension getMinimumSize (JComponent)
: Gibt die Mindestgröße der angegebenen Komponente zurück, die für das Erscheinungsbild geeignet ist.
Was gibt es sonst noch zu lesen? |
---|
Was wird Ihnen an der neuen Version von JDK gefallen? Wozu führt die häufige Veröffentlichung neuer Versionen des JDK? |
GO TO FULL VERSION