Diese neuen Features solltest du unbedingt kennen
Heutzutage gilt Java als veraltete, uncoole Sprache. Sie hat einen zu hohen Speicherverbrauch, es ist zu viel Boilerplate Code notwendig. Zudem weisen die Softwaresysteme zu hohe Startup-Zeiten auf und es fehlt an modernen Sprachfeatures.
Aber ist das wirklich so? Oder ist Java besser als sein Ruf und bietet moderne Features für die Entwicklung sowie interessante Möglichkeiten für den Betrieb auf den gängigsten Plattformen?
Im Rahmen meiner Artikelserie zeige ich, dass die Technologie Java alles mitbringt, was für den Einsatz in Softwareprojekten erforderlich ist. Durch die neuen Java 21 Features macht das Programmieren wieder Spaß und der Betrieb der Software wird wirtschaftlicher.
Neuer Entwicklungsprozess schafft Transparenz
Mit dem Release von Java 9 im Herbst 2017 wurde gleichzeitig ein neuer Entwicklungsprozess vorgestellt. Seitdem werden jeweils Mitte März und Mitte September neue Versionen freigegeben. Die Änderungen einer jeden Version werden anhand der Java Enhancement Proposals (kurz JEP) beschrieben. Diese so geschaffene Transparenz kommt jeder oder jedem in Form von Planbarkeit zugute.
Die JEPs werden in den unterschiedlichsten Projekten erstellt. Sie wurden ins Leben gerufen, um Java kontinuierlich zu verbessern und hin zu einer modernen Technologie zu transformieren.
Die Stewards und Architekten von Oracle verstehen Java als generische Plattform,
a) auf der ein möglichst großes Feld an Problemklassen gelöst werden kann,
b) die auf aktueller Hardware effizient läuft und
c) die die Interessen der Entwickler*innen bedient.
Die Weiterentwicklung der Technologie
Die fünf größten Projekte, in deren Kontext an der Weiterentwicklung der Technologie gearbeitet wird, sind im Folgenden kurz beschrieben:
1. Project Loom
Dieses Projekt hat zum Ziel, die Handhabung der Nebenläufigkeit in Java zu verbessern. Hierzu wurden mit Java 21 leichtgewichtige user-mode Threads, Virtual Threads (JEP-444), eingeführt. Diese werden statt vom Betriebssystem von der JVM verwaltet. So kann potenziell eine Anzahl dieser Threads in der Größenordnung von 106 in der JVM verwaltet werden.
Darauf aufbauend wird daran gearbeitet, die Programmierung von Nebenläufigkeiten mit Hilfe der Structured Concurrency API (JEP-462, Second Preview) zu vereinfachen.
2. Project Amber
Die Weiterentwicklung der Sprachfeatures von Java ist das Ziel dieses Projekts. Hier werden einzelne Features wie bpsw. Records (JEP-395 / Java 16), Pattern Matching for switch (JEP-441 / Java 21) / for instanceof (JEP-394 / Java 16) und Sealed classes (JEP-409 / Java 17) entwickelt. Alle JEPs bieten für sich bereits einen Mehrwert – die genannten ermöglichen in Kombination ein daten-orientiertes Programmieren.
3. Project Leyden
Im Rahmen dieses Projekts werden drei Punkte angegangen: lange Startup-Zeiten, lange Zeit zur Peak Performance und Größe der Artefakte. Hierzu wird an dem Konzept Static Run-Time Images gearbeitet, bei dem nicht benötigte Features und Artefakte beim Build-Vorgang entfernt werden.
Dieses Projekt wurde Mitte 2022 ins Leben gerufen und hat aktuell noch keinen JEP veröffentlicht.
4. Project Valhalla
Dieses Projekt zielt darauf ab, die Leistung und Effizienz von Java im Umgang mit Speicher zu verbessern. Das Hauptaugenmerk liegt auf der Einführung von "Value Types" (Werttypen), die eine effizientere Nutzung des Speichers ermöglichen sollen. Diese Werttypen sollen die Vorteile von Objekten und Primitiven Typen kombinieren und so den Overhead reduzieren. Durch die Optimierung des Speicherverbrauchs wird Valhalla besonders relevant für Anwendungen, die große Datenmengen verarbeiten.
Aus diesem Projekt stammen bspw. die JEPs für die Hidden Classes (JEP-371 / Java 15), JVM Constants API (JEP-334 / Java 12) und Dynamic Class-File Constants (JEP-309 / Java 11).
5. Project Panama
Die Verbesserung der Interoperabilität von Java mit nativem Code ist das Ziel dieses Projekts. Das Hauptaugenmerk liegt dabei auf der Verbindung zwischen Java-Code und sogenannten "Foreign Functions" oder auch nativen Schnittstellen. Das Projekt strebt an, die Effizienz und Leistung von Java-Anwendungen zu steigern, insbesondere in Bereichen, in denen der Einsatz von nativem Code erforderlich ist. Die Foreign Function & Memory API ist in Java 21 als Preview Feature enthalten (JEP-442).
Fazit
Java 21 bietet inzwischen sehr viele neue, moderne Features und es kommen ständig neue hinzu. Der Code lässt sich kompakter implementieren, ohne dass die Lesbarkeit darunter leidet.
Auf der openJDK-Webseite sind umfangreiche Information zu den aktuellen Vorgängen rund um Java verfügbar. Es lohnt sich, sich dort umzuschauen.
Und was kommt als nächstes?
Im nächsten Artikel diskutiere ich das oben erwähnte datenorientierte Programmiermodell, also das Zusammenspiel von Records, Pattern Matching und Sealed Classes.