Wir sind ein junger Verein, der es sich zum Ziel gesetzt hat, eine starke Entwickler-Community im Raum Ingolstadt aufzubauen. Als Java-User-Group liegt unser Fokus natürlich auf der Java-Plattform mit all ihren Facetten, jedoch befassen wir uns mit der gesamten Bandbreite der Software-Entwicklung und des Betriebs.
Unser monatlicher Termin ist kostenfrei und offen für jeden.
Unsere Präsenzen im Web:
Dieser Talk ist lizensiert unter CC BY-SA 4.0.
released 2021-03-16
Zugriff auf JDK interne Klassen, Methoden oder Felder wird - bis auf ein paar kritische Ausnahmen wie z.B. sun.misc.Unsafe
- bei Strafe untersagt.
< JDK16: --illegal-access=permit
>= JDK16: --illegal-access=deny
(Deprecated)
Feingranular: --add-opens java.base/java.util=ALL-UNNAMED
Annotation @jdk.internal.ValueBased
für "value-based" Klassen wie z.B. Integer
.
Synchronisierung darauf führt zur Compiler Warnung.
Value Semantik soll etabliert werden.
Flag -XX:DiagnoseSyncOnValueBasedClasses
führt zu entsprechenden Laufzeitwarnungen.
Konstruktoren dieser Klassen wie Integer(int)
und Integer(String)
wurden "Deprecated for removal".
Statisch typisierter Zugriff auf nativen Code.
Vereinfachung des fehlerbehafteten Zugriff auf native Bibliotheken.
Ersatz für JNI.
MethodHandle strlen = CLinker.getInstance().downcallHandle(
LibraryLookup.ofDefault().lookup("strlen"),
MethodType.methodType(long.class, MemoryAddress.class),
FunctionDescriptor.of(C_LONG, C_POINTER)
);
try (MemorySegment str = CLinker.toCString("Hello")) {
long len = strlen.invokeExact(str.address()); // 5
}
API für sicheren und effizienten Zugriff auf fremden Memory außerhalb des Java Heap.
Ersatz für sun.misc.Unsafe
.
VarHandle intHandle = MemoryHandles.varHandle(int.class,
ByteOrder.nativeOrder());
try (MemorySegment segment = MemorySegment.allocateNative(100)) {
for (int i = 0; i < 25; i++) {
intHandle.set(segment, i * 4, i);
}
}
Neue Methode invokeDefault
wurde dem java.lang.reflect.InvocationHandler
Interface hinzufügt.
Ermöglicht den Aufruf von default Methoden in Proxy Interfaces.
Unterstützung für Unix domain sockets (AF_UNIX) wurde den java.nio.channels
Klassen hinzugefügt.
Neues Formatter Pattern B
in
java.time.format.DateTimeFormatter
und DateTimeFormatterBuilder
nach Unicode Technical Standard #35 Part 4 Section 2.3.
int hour;
DateTimeFormatter.ofPattern("B").format(LocalTime.now().withHour(hour));
/* default Locale = GERMAN */
// hour 0-4: "nachts"
// hour 5-9: "morgens"
// hour 10-11: "vormittags"
// hour 12: "mittags"
// hour 13-17: "nachmittags"
// hour 18-23: "abends"
/* default Locale = ENGLISH */
// hour 0-5: "at night"
// hour 6-11: "in the morning"
// hour 12-17: "in the afternoon"
// hour 18-20: "in the evening"
// hour 21-23: "at night"
List<String> list = Stream.of("This", "is", "useful").toList();
jdk.incubator.vector
Klassen, z.B. IntVector, FloatVector.
Unmittelbare Unterstützung sogenannter "Single Instruction Multiple Data (SIMD)" CPU Befehlssätze.
Architektur agnositisch, Software Fallback.
FloatVector va = FloatVector.fromArray(a, 0), vb = FloatVector.fromArray(b, 0);
FloatVector vc = va.mul(va).add(vb.mul(vb)).neg();
}
// similar to
for (int i = 0; i < a.length; i++) {
c[i] = (a[i] * a[i] + b[i] * b[i]) * -1.0f;
}
CompilerCommand
war bisher Fehleranfällig aufgrund dynamischer Parameterlisten:
-XX:CompileCommand=option,<method pattern>,<option name>,<value type>,<value>
Dies ist nun für jede Option separat zu verwenden, es erfolgt eine Validierung und hilfreiche Fehlermeldungen:
-XX:CompileCommand=<option name>,<method pattern>,<value>
G1 Garbage Collector verlagert die aufwändigen Prozesse aus der GC Pause in einen nebenläufigen Thread.
Z Garbage Collector verarbeitet Thread Stacks nun nebenläufig, damit wird die GC Pause des ZGC konstant im Bereich von ein paar Hundert Mikrosekunden.
Neues Java-Flight-Recorder Ereignis jdk.ObjectAllocationSample
eingeführt, das ein ständiges Allocation Profiling mit geringen Overhead ermöglicht.
VM-interne Metaspace und Class-Space implementierungen überarbeitet mit dem Ergebnis des geringeren Speicherverbrauchs.
Neuer Schalter: XX:MetaspaceReclaimPolicy=(balanced|aggressive|none)
Schalter InitialBootClassLoaderMetaspaceSize
und UseLargePagesInMetaspace
deprecated.
Jarsigner beachtet POSIX Datei Flags.
SHA-3 Unterstützung zu den genannten Providern hinzugefügt.
Die genannten Alorithmen werden vom JarSigner unterstützt.
Erzeugen von RFC 5652 und RFC 6211 Signaturen.
Die keytool Optionen -printcert
und -printcrl
haben die Optionen -trustcacerts
und -keystore
erhalten.
Der SunPKCS11 Provider hat SHA-3 Unterstützung erhalten.
Weitere Erweiterungen.
Neue System Properties:
* jdk.tls.maxHandshakeMessageSize
* jdk.tls.maxCertificateChainLength
Verbesserungen im SunJSSE Provider für TLS Protokoll Verhandlungen.
EdDSA Signatur Unterstützung für den SunJSSE Provider.
Neue Klassenart als vollwertiges Sprachelement für unveränderliche Daten.
record JavaTreff(LocalDate day, String... topics) {}
var jt = new JavaTreff(LocalDate.now(), "Java 16");
LocalDate when = jt.day();
String[] what = jt.topics();
jt.hashCode(); jt.toString(); jt.equals(other);
Das instanceof
Pattern Matching (seit JDK 14) ist nun vollwertiges Sprachfeature:
Number n = getNumber();
if (n instanceof Integer i) { }
if (n instanceof Float f) { }
Sealed Classes bleiben ein Preview Feature, Records werden unterstützt:
public sealed interface Expr
permits ConstantExpr, PlusExpr, TimesExpr, NegExpr { ... }
public record ConstantExpr(int i) implements Expr { ... }
public record PlusExpr(Expr a, Expr b) implements Expr { ... }
public record TimesExpr(Expr a, Expr b) implements Expr { ... }
public record NegExpr(Expr e) implements Expr { ... }
Das Tool jpackage
(seit JDK 14) verlässt den Incubator Status und gilt nun als produktionsreif.
Removal of java.awt.PeerFixer
Removal of Experimental Features AOT and Graal JIT
Deprecated Tracing Flags Are Obsolete and Must Be Replaced With Unified Logging Equivalents
Removed Root Certificates with 1024-bit Keys
Removal of Legacy Elliptic Curves
Terminally Deprecated ThreadGroup stop, destroy, isDestroyed, setDaemon and isDaemon
Parts of the Signal-Chaining API Are Deprecated
Deprecated the java.security.cert APIs That Represent DNs as Principal or String Objects
Incomplete Support for Unix Domain Sockets in Windows 2019 Server
TreeMap.computeIfAbsent Mishandles Existing Entries Whose Values Are null
Line Terminator Definition Changed in java.io.LineNumberReader
Enhanced Support of Proxy Class
Support Supplementary Characters in String Case Insensitive Operations
Module::getPackages Returns the Set of Package Names in This Module
Proxy Classes Are Not Open for Reflective Access
HttpClient.newHttpClient and HttpClient.Builder.build Might Throw UncheckedIOException
The Default HttpClient Implementation Returns Cancelable Futures
HttpPrincipal::getName Returned Incorrect Name
(fs) NullPointerException Not Thrown When First Argument to Path.of or Paths.get Is null
US/Pacific-New Zone Name Removed as Part of tzdata2020b
Argument Index of Zero or Unrepresentable by int Throws IllegalFormatException
GZIPOutputStream Sets the GZIP OS Header Field to the Correct Default Value
Refine ZipOutputStream.putNextEntry() to Recalculate ZipEntry’s Compressed Size
java.util.logging.LogRecord Updated to Support Long Thread IDs
Support for CLDR Version 38
Added Property to Control LDAP Authentication Mechanisms Allowed to Authenticate Over Clear Connections
LDAP Channel Binding Support for Java GSS/Kerberos
Make JVMTI Table Concurrent
Object Monitors No Longer Keep Strong References to Their Associated Object
IncompatibleClassChangeError Exceptions Are Thrown For Failing 'final' Checks When Defining a Class
Upgraded the Default PKCS12 Encryption and MAC Algorithms
Added Entrust Root Certification Authority - G4 certificate
Added 3 SSL Corporation Root CA Certificates
Disable TLS 1.0 and 1.1
Annotation Interfaces May Not Be Declared As Local Interfaces
C-Style Array Declarations Are Not Allowed in Record Components
DocLint Support Moved to jdk.javadoc Module
Eliminating Duplication in Simple Documentation Comments
Viewing API Documentation on Small Devices
API Documentation Links to Platform Documentation
Improvements for JavaDoc Search