UNSERE

Schulungen

Java 21 New Features

Dauer:

1 Tag

Tageskurs

Kurssprache:

Deutsch

Unterrichtsmaterial überwiegend in englischer Sprache

Virtual Threads stellen in Java eine Innovation dar, die mit dem Project Loom ins Leben gerufen wurde. Sie dienen dazu, die gleichzeitige Bearbeitung vielfältiger Tasks effektiver zu gestalten. Diese Threads sind als eine Art leichtgewichtige Alternative zu den herkömmlichen Betriebssystem-Threads konzipiert und haben das Ziel, die Performanz von Applikationen, die eine hohe Anzahl paralleler Prozesse bewältigen, speziell bei I/O-wartenden Operationen, zu optimieren.

Die Vorteile von Virtual Threads sind vielfältig:

Erweiterte Skalierbarkeit: Im Gegensatz zu Plattform-Threads ermöglichen Virtual Threads das Management von Millionen gleichzeitiger Threads durch eine einzige Java-Instanz, was die Grenzen traditioneller Threads sprengt.

Gesteigerte Effizienz: Da Virtual Threads unter der Kontrolle der JVM stehen, können sie mit einer höheren Effizienz hinsichtlich der CPU-Nutzung geplant und verwaltet werden, was insbesondere dann zur Geltung kommt, wenn ein Thread auf eine I/O-Aktion wartet.

Vereinfachung von Parallelität: Mit Virtual Threads können Entwickler auf vertraute Synchronisationswerkzeuge zurückgreifen, um den Zugriff auf geteilte Ressourcen zu synchronisieren, anstatt sich auf komplexere asynchrone Strukturen verlassen zu müssen.

Weniger überflüssiger Code: Die Möglichkeit, synchrone Programmiermuster anzuwenden, verringert den Bedarf an zusätzlichem Code, der oft mit asynchroner Programmierung einhergeht.

Optimierte Performance bei I/O-intensiven Applikationen: Anwendungen, die stark von Ein- und Ausgabeoperationen abhängen, profitieren in besonderem Maße von den Eigenschaften der Virtual Threads, da diese die Blockadezeiten minimieren.

Vereinfachte Fehlerbehandlung: Die Handhabung von Fehlern in einem synchronen Programmierstil ist in der Regel intuitiver und leichter umzusetzen als in einem asynchronen Kontext.

Structured Concurrency ist ein Programmierparadigma in Java, das darauf abzielt, die Arbeit mit nebenläufigen Prozessen – also die Ausführung von mehreren Berechnungen parallel – zu vereinfachen und sicherer zu machen. Es handelt sich um ein Konzept, das die Lebensdauer von nebenläufigen Prozessen an die Programmstruktur, in der sie gestartet werden, bindet. Dies bedeutet, dass wenn eine Methode oder ein Block von Code nebenläufige Prozesse initiiert, diese Prozesse nicht über das Ende der Ausführung dieser Methode oder des Blocks hinaus weiterlaufen dürfen.

Structured Concurrency bringt mehrere Vorteile mit sich:

Einfachere Fehlerbehandlung: Fehler, die in nebenläufigen Prozessen auftreten, können an dem Punkt behandelt werden, an dem die Prozesse gestartet wurden, was die Fehlerbehandlung vereinfacht und zentralisiert.

Verbesserte Lesbarkeit: Da die nebenläufigen Prozesse eine klar definierte Struktur haben, wird der Code, der nebenläufige Operationen enthält, einfacher zu lesen und zu verstehen.

Lebenszyklusmanagement: Structured Concurrency hilft bei der Verwaltung des Lebenszyklus von Threads, indem es sicherstellt, dass alle gestarteten Threads beendet werden, bevor der übergeordnete Block abgeschlossen ist. Dies vermeidet „verwaiste“ Threads, die nach Beendigung des Hauptprogramms weiterlaufen und Ressourcen verbrauchen.

Sichere Beendigung: Wenn ein Block von Code, der nebenläufige Prozesse initiiert, abgeschlossen wird, werden alle seine Prozesse ordnungsgemäß beendet. Dies verhindert Probleme, die durch unerwartetes Abbrechen von Operationen entstehen könnten.

Verbesserte Ressourcennutzung: Durch die strukturierte Beendigung von nebenläufigen Prozessen kann eine effizientere Ressourcennutzung erzielt werden, da Ressourcen nicht unnötig von nicht mehr benötigten Prozessen belegt werden.

In Java kann Structured Concurrency durch verschiedene Mechanismen wie die ExecutorService-API oder Frameworks und Bibliotheken, die dieses Paradigma unterstützen, umgesetzt werden. Es ist auch ein wichtiger Teil des Designs hinter Project Loom, das die Einführung von leichtgewichtigen Threads – den Virtual Threads – plant, welche die Anwendung von Structured Concurrency in Java weiter erleichtern sollen.

Das Vector API in Java ist eine experimentelle API, die als Teil des Project Panama eingeführt wurde, um einen neuen Weg für die effiziente Ausführung von vektorbasierten Berechnungen zu ermöglichen. Diese API stellt einen großen Fortschritt in der Java-Plattform dar, da sie es ermöglicht, Vorteile der Vektorverarbeitungsfähigkeiten moderner CPUs direkt in Java zu nutzen.

Hier sind die wichtigsten Punkte des Vector API:

Performance-Steigerung: Durch die Nutzung von SIMD (Single Instruction, Multiple Data) Instruktionen können mit dem Vector API mehrere Datenoperationen gleichzeitig ausgeführt werden, was zu einer deutlichen Beschleunigung von Berechnungen führen kann.

Hardware-Ausnutzung: Das API ist darauf ausgelegt, die spezifischen Vektorhardware-Befehlssätze, die in modernen Prozessoren vorhanden sind, wie AVX in x86 oder NEON in ARM, effektiv zu nutzen.

Klarheit und Sicherheit: Obwohl es sich um eine Low-Level-Operation handelt, ist die API so gestaltet, dass sie in die Java-Sprache passt und die Sicherheits- und Klarheitsgarantien von Java beibehält.

Plattformunabhängigkeit: Programme, die das Vector API verwenden, sind plattformunabhängig, da die API die Unterschiede in den Befehlssätzen der Prozessoren abstrahiert. Die JVM ist verantwortlich für die Ausführung des am besten geeigneten Befehlssatzes für die aktuelle Plattform.

Entwicklerfreundlichkeit: Das API ist so konzipiert, dass es einfach zu verwenden ist und eine nahtlose Integration in den bestehenden Code ermöglicht, wodurch Entwickler ohne tiefgreifendes Verständnis der Vektorhardware leistungsstarke Optimierungen vornehmen können.

Das Vector API befindet sich in einem inkrementellen Entwicklungsprozess und ist Teil der JDK-Enhancement-Proposals (JEPs), die die Entwicklung und Integration neuer Features in das JDK steuern. Mit jeder neuen Java-Version werden Verbesserungen und Erweiterungen am Vector API vorgenommen, um die Performance und Benutzerfreundlichkeit zu steigern.—-
 

Rückblick: Was war neu in Java 11 & Java 17
Die wichtigsten Neuerungen in Java 21

  • Pattern Matching for switch (JEP 441 , Java 19)
  • Record Patterns (JEP 440, Java 21)
  • Scoped Values (JEP 446 Preview, Java 21)
  • Foreign Function & Memory API (JEP 442 Preview, Java 21)
  • Virtual Threads (JEP 444 , Java 21)
  • Structured Concurrency (JEP 437 Incubator, Java 21)
  • Vector API (JEP 448 Incubator, Java 21)
  • String Templates (JEP 430 Preview, Java 21)
  • Sequenced Collections (JEP 431, Java 21)

Vorkenntnisse

  • Grundlegende Kenntnisse in der
    Programmiersprache Java

Zielgruppe

  • Java-Entwickler, die von Java 8-17
    auf Java 21 umsteigen wollen