Neues in Java 10 (18.3)
Java 10 ist der Nachfolger von Java 9. Das JDK wurde im März 2018 veröffentlicht. Auf Java 10 (auch 18.3) folgt Java 11 (auch Java 18.9 genannt).
Wie bei Java 9 ist das OpenJDK die Referenzimplementierung, auf der das Oracle JDK steht. wird. Neu sind zwei Downloads:
- OpenJDK builds für Windows, (Alpine) Linux, macOS
- Oracle JDK builds für Windows, macOS, Linux, Solaris SPARC
Die einzige Sprachänderung ist die Einführung von var
:
- https://blog.codefx.org/java/java-10-var-type-inference/
- https://medium.com/@afinlay/java-10-sneak-peek-local-variable-type-inference-var-3022016e1a2b
Die umgesetzten JEPs (JDK Enhancements) sind:
- JEP 286: Local-Variable Type Inference
- JEP 296: Consolidate the JDK Forest into a Single Repository
- JEP 304: Garbage-Collector Interface
- JEP 307: Parallel Full GC for G1
- JEP 310: Application Class-Data Sharing
- JEP 312: Thread-Local Handshakes
- JEP 313: Remove the Native-Header Generation Tool (javah)
- JEP 314: Additional Unicode Language-Tag Extensions
- JEP 316: Heap Allocation on Alternative Memory Devices
- JEP 317: Experimental Java-Based JIT Compiler
- JEP 319: Root Certificates
- JEP 322: Time-Based Release Versioning
Diverse @Deprecated markierte Typen und Methoden wurden in Java 10 entfernt. Allerdings verschwinden java.activation, java.corba, java.se.ee (Aggregator), java.transaction, java.xml.bind, java.xml.ws, java.xml.ws.annotation erst in Java 11 (18.9).
Die Javadoc ist online und auch eine Seite mit dem Javadoc-Diff zur Java 9, sodass man die Unterschiede zu Java 9 gut sehen kann. Die Differenz ist detailiert und zeigt neue Methoden, aber auch Textänderungen in der Java-Dokumentation.
Eine andere Sicht geben die JDK 10 Release Notes. Sie verweisen auch auf die Oracle JDK 10 Certified System Configurations, also auf die untersützten Systemkonfigurationen. Die dokumentieren zum Beispiel, dass nur Windows mit 64-Bit-Systemen unterstützt werden, oder nur Ubuntu, Red Hat oder Oracle Linux. Schön ist ein Update vom Java Mission Control auf Version 6.0.
Die Seite mit den Spezifikationen (JLS und JVM) wurde ebenfalls aktualisiert.
Die Seite Java SE 10 (18.3) ( JSR 383) Final Release Specification ist aktuell ein Draft mit der Spezifikation.
Alle Neuerungen auf einen Blick:
- java.awt.Toolkit.getMenuShortcutKeyMaskEx()
- java.awt.geom.Path2D.trimToSize()
- java.io.ByteArrayOutputStream.toString(java.nio.charset.Charset)
- java.io.PrintStream(java.io.File, java.nio.charset.Charset)
- java.io.PrintStream(java.io.OutputStream, boolean, java.nio.charset.Charset)
- java.io.PrintStream(java.lang.String, java.nio.charset.Charset)
- java.io.PrintWriter(java.io.File, java.nio.charset.Charset)
- java.io.PrintWriter(java.io.OutputStream, boolean, java.nio.charset.Charset)
- java.io.PrintWriter(java.lang.String, java.nio.charset.Charset)
- java.io.Reader.transferTo(java.io.Writer)
- java.lang.Runtime.Version.feature()
- java.lang.Runtime.Version.interim()
- java.lang.Runtime.Version.patch()
- java.lang.Runtime.Version.update()
- java.lang.StackWalker.StackFrame.getDescriptor()
- java.lang.StackWalker.StackFrame.getMethodType()
- java.lang.invoke.MethodType.lastParameterType()
- java.lang.management.RuntimeMXBean.getPid()
- java.lang.management.ThreadMXBean.dumpAllThreads(boolean, boolean, int)
- java.lang.management.ThreadMXBean.getThreadInfo(long[], boolean, boolean, int)
- java.net.URLDecoder.decode(java.lang.String, java.nio.charset.Charset)
- java.net.URLEncoder.encode(java.lang.String, java.nio.charset.Charset)
- java.nio.file.FileStore.getBlockSize()
- java.time.format.DateTimeFormatter.localizedBy(java.util.Locale)
- java.util.DoubleSummaryStatistics(long, double, double, double)
- java.util.IntSummaryStatistics(long, int, int, long)
- java.util.List.copyOf(java.util.Collection)
- java.util.LongSummaryStatistics(long, long, long, long)
- java.util.Map.copyOf(java.util.Map)
- java.util.Optional.orElseThrow()
- java.util.OptionalDouble.orElseThrow()
- java.util.OptionalInt.orElseThrow()
- java.util.OptionalLong.orElseThrow()
- java.util.Properties.storeToXML(java.io.OutputStream, java.lang.String, java.nio.charset.Charset)
- java.util.Scanner(java.io.File, java.nio.charset.Charset)
- java.util.Scanner(java.io.InputStream, java.nio.charset.Charset)
- java.util.Scanner(java.nio.channels.ReadableByteChannel, java.nio.charset.Charset)
- java.util.Scanner(java.nio.file.Path, java.nio.charset.Charset)
- java.util.Set.copyOf(java.util.Collection)
- java.util.SplittableRandom.nextBytes(byte[])
- java.util.concurrent.locks.StampedLock.isLockStamp(long)
- java.util.concurrent.locks.StampedLock.isOptimisticReadStamp(long)
- java.util.concurrent.locks.StampedLock.isReadLockStamp(long)
- java.util.concurrent.locks.StampedLock.isWriteLockStamp(long)
- java.util.jar.JarEntry.getRealName()
- java.util.jar.JarFile.versionedStream()
- java.util.spi.LocaleNameProvider.getDisplayUnicodeExtensionKey(java.lang.String, java.util.Locale)
- java.util.spi.LocaleNameProvider.getDisplayUnicodeExtensionType(java.lang.String, java.lang.String, java.util.Locale)
- java.util.stream.Collectors.toUnmodifiableList()
- java.util.stream.Collectors.toUnmodifiableMap(java.util.function.Function, java.util.function.Function)
- java.util.stream.Collectors.toUnmodifiableMap(java.util.function.Function, java.util.function.Function, java.util.function.BinaryOperator)
- java.util.stream.Collectors.toUnmodifiableSet()
- javax.lang.model.SourceVersion.RELEASE_10
- javax.lang.model.util.TypeKindVisitor6.visitNoTypeAsModule(javax.lang.model.type.NoType, P)
- javax.lang.model.util.TypeKindVisitor9.visitNoTypeAsModule(javax.lang.model.type.NoType, P)
- javax.swing.ButtonModel.getGroup()