Connect with us

Entwicklung & Code

Java 25: Neue Features – nicht so bekannt, aber wichtig


Im September 2025 erscheint das OpenJDK 25 mit 18 Java Enhancement Proposals. Die bekannteren Funktionen haben wir uns bereits im vorangegangenen Post angeschaut. Jetzt werfen wir einen Blick auf die Themen, die bei den meisten Entwicklerinnen und Entwicklern etwas weniger Aufmerksamkeit erregen. Mit dabei sind Verbesserungen beim Profiling und Beobachten von laufenden Java-Anwendungen, beim Start und Warm-up, beim Speicherverbrauch und kleinere Änderungen bei Garbage Collectors sowie Erweiterungen bei der Unterstützung von Kryptografie.


Neuigkeiten von der Insel - Falk Sippach

Neuigkeiten von der Insel - Falk Sippach

Falk Sippach ist bei der embarc Software Consulting GmbH als Softwarearchitekt, Berater und Trainer stets auf der Suche nach dem Funken Leidenschaft, den er bei seinen Teilnehmern, Kunden und Kollegen entfachen kann. Bereits seit über 15 Jahren unterstützt er in meist agilen Softwareentwicklungsprojekten im Java-Umfeld. Als aktiver Bestandteil der Community (Mitorganisator der JUG Darmstadt) teilt er zudem sein Wissen gern in Artikeln, Blog-Beiträgen, sowie bei Vorträgen auf Konferenzen oder User Group Treffen und unterstützt bei der Organisation diverser Fachveranstaltungen. Falk twittert unter @sippsack.

Das Entfernen des Quellcodes und Build-Supports für den 32-Bit-x86-Port (nach Deprecation in JDK 24 via JEP 501) zielt darauf ab, neue Features nicht länger mit 32-Bit-Fallbacks bedienen zu müssen, alle 32-Bit-x86-Sonderpfade zu streichen und Build/Test-Infrastruktur zu vereinfachen. Nicht betroffen sind der 32-Bit-Support anderer Architekturen und frühere JDK-Releases. Der Pflegeaufwand stand in keinem Verhältnis zum Nutzen und das Entfernen beschleunigt die Weiterentwicklung (z. B. bei Loom, FFM API, Vector API, …).


Online-Konferenz zu Java 2025

Online-Konferenz zu Java 2025

(Bild: Playful Creatives/Adobe Stock))

Am 14. Oktober dreht sich bei der betterCode() Java 2025 alles um das für September geplante Java 25. Die von iX und dpunkt verlag ausgerichtete Online-Konferenz behandelt in sechs Vorträgen die wesentlichen Neuerungen. Eine Keynote von Adam Bien zu 30 Jahren Java rundet den Tag ab.

Das Entwicklerteam hat den JDK Flight Recorder (JFR) so erweitert, dass er auf Linux den CPU-Zeit-Timer des Kernels nutzt und damit präzisere CPU-Profile erstellt. Und das auch dann, wenn Java-Code gerade native Bibliotheken ausführt. Bisher stützte sich JFR vor allem auf einen „Execution Sampler“, der in festen Echtzeit-Intervallen (z. B. alle 20 ms) Java-Stacks zieht. Dabei können Threads in nativem Code übersehen, Proben verpasst und gegebenenfalls nur ein Teil der Threads erfasst werden.

Mit CPU-Zeit-Profiling bildet JFR die tatsächlich verbrauchten CPU-Zyklen ab und vermeidet unsichere, interne Schnittstellen, wie sie manche externe Tools verwenden. Ein Sortieralgorithmus verbringt zum Beispiel seine gesamte Laufzeit auf der CPU und taucht entsprechend stark im CPU-Profil auf. Eine Methode, die meist auf Daten aus einem Socket wartet, beansprucht hingegen kaum CPU-Zeit und erscheint folglich nur geringfügig im Profil.

Der JFR soll stabiler werden, indem er Java-Thread-Stacks nur noch an Safepoints traversiert und dabei den bekannten Safepoint-Bias so weit wie möglich reduziert. Bisher nahm der JFR in festen Intervallen (z. B. alle 20 ms) asynchron Samples auch außerhalb von Safepoints auf. Das erforderte Heuristiken zum Stack-Parsing, die ineffizient waren und im Fehlerfall sogar JVM-Crashes auslösen konnten (etwa bei gleichzeitigem Class-Unloading). Künftig wird die Profilerstellung der Wanduhrzeit (wall-clock time) weiter unterstützt, aber mit einem robusteren Verfahren, das Genauigkeit und Ausfallsicherheit besser ausbalanciert.

Dieses JEP erweitert den JDK Flight Recorder um eine Bytecode-Instrumentierung, die jeden ausgewählten Methodenaufruf exakt misst und mit Stacktrace aufzeichnet – im Gegensatz zu stichprobenbasiertem Profiling. Methoden lassen sich ohne Codeänderungen zielgenau per Kommandozeile, Konfigurationsdatei, jcmd oder JMX auswählen. Nicht vorgesehen sind das Aufzeichnen von Argumenten/Feldwerten, das Tracen nicht-bytecodierter Methoden (z. B. native, abstract) sowie das gleichzeitige Instrumentieren sehr vieler Methoden. In solchen Fällen bleibt Sampling der richtige Ansatz. Um lange Startzeiten zu analysieren, lassen sich statische Initialisierer ausgewählter Klassen gezielt tracen. So wird sichtbar, welche Initialisierung sich auf später verschieben lässt oder wo ein jüngst eingespielter Fix tatsächlich Laufzeit spart.

Dieses JEP vereinfacht das Erzeugen von Ahead-of-Time-Caches (AOT), die den Java-Start deutlich beschleunigen: Für gängige Fälle soll ein einziger Schritt genügen, der Trainingslauf und Cache-Erstellung kombiniert. Ziel ist es, die bislang nötige Zwei-Phasen-Prozedur (erst record, dann create mit separater AOT-Konfiguration) abzulösen – ohne an Ausdrucksstärke zu verlieren und ohne neue AOT-Optimierungen einzuführen. Ein Beispiel aus dem Status quo: Heute braucht man zwei java-Aufrufe und bleibt mit einer temporären *.aotconf-Datei zurück. Künftig entfällt dieser Ballast, was unter anderem Frameworks wie JRuby bei eigenen Trainingsläufen entgegenkommt. Für Spezialfälle bleiben die expliziten AOT-Modi und Konfigurationsoptionen weiterhin verfügbar.

Die JVM (Java Virtual Machine) kann jetzt beim Start Methodenausführungsprofile aus einem früheren Lauf laden, sodass der JIT direkt die voraussichtlich heißen Methoden kompiliert, statt zunächst Profile sammeln zu müssen. Die Profile werden in einem Training Run erzeugt und über den bestehenden AOT-Cache bereitgestellt. Dafür sind keine Codeänderungen und keine neuen Workflows nötig. Warm-up kostet heute Zeit, weil HotSpot erst während der Produktion herausfindet, welche Methoden es zu optimieren gilt. Verlagert man das Profiling in den Training Run, erreicht die Anwendung in Produktion schneller ihre Spitzenleistung. Ein Webdienst beispielsweise, der sonst erst nach einigen Minuten Profil-Sammeln voll performant ist, kann mit vorab aufgezeichneten Profilen schon beim Start die kritischen Request-Pfade kompilieren und so schneller unter Last reagieren.

Dieses JEP führt eine einfache API ein, um kryptografische Objekte — Schlüssel, Zertifikate und Sperrlisten — in das weit verbreitete PEM-Textformat (RFC 7468) zu kodieren und daraus wieder Objekte zu dekodieren. Sie unterstützt die Standardrepräsentationen PKCS#8 (Private Keys), X.509 (Public Keys, Zertifikate, CRLs) sowie PKCS#8 v2.0 (verschlüsselte Private Keys und asymmetrische Schlüssel). Bisher fehlte in Java eine komfortable PEM-API. Entwickler mussten Base64, Header/Footer-Parsing, Factory-Auswahl und Algorithmus-Erkennung selbst erledigen. Die neue Preview-API reduziert diesen Boilerplate deutlich.

Dieses JEP finalisiert (unverändert gegenüber der Preview in JDK 24) eine API für Key Derivation Functions (KDFs), etwa HKDF (RFC 5869) und Argon2 (RFC 9106). Sie ermöglicht den Einsatz von KDFs in KEM/HPKE-Szenarien (z. B. ML-KEM, Hybrid Key Exchange in TLS 1.3), erlaubt PKCS#11-basierte Implementierungen und räumt auf, indem JDK-Komponenten wie TLS 1.3 und DHKEM auf die neue API statt auf interne HKDF-Logik umgestellt werden. Aus einem gemeinsamen Geheimnis (z. B. ECDH-Shared-Secret) und einem Salt lässt sich per HKDF deterministisch ein Satz Sitzungsschlüssel für Verschlüsselung und MAC ableiten. PBKDF1/2 wandern übrigens nicht in die neue API, sie bleiben wie bisher über SecretKeyFactory nutzbar.

Die kompakten Objekt-Header gelten mit dem Update nicht mehr als experimentell, sondern als offizielles Produktfeature. Sie gelten jedoch nicht als Standard-Layout. Seit ihrer Einführung in JDK 24 (JEP 450) haben sie sich in Stabilität und Performance bewährt – getestet mit der vollständigen JDK-Testsuche bei Oracle und in Hunderten von Amazon-Services (teils auf JDK 21/17 zurückportiert). Experimente zeigen deutliche Vorteile: bis zu 22 Prozent weniger Heap, 8 Prozent weniger CPU-Zeit, 15 Prozent weniger GCs (G1/Parallel), und ein hochparalleler JSON-Parser läuft zehn Prozent schneller. Damit verbessert der geringere Overhead pro Objekt die Speichernutzung und Cache-Lokalität, was spürbar Start-up und Durchsatz zugutekommt.

Der generationale Modus des Shenandoah-GC wechselt vom experimentellen in den Produktstatus (eingeführt als Experiment in JDK 24 via JEP 404). Der Standard bleibt unverändert, per Default nutzt Shenandoah weiterhin eine Generation. Die Umstufung basiert auf zahlreichen Stabilitäts- und Performance-Verbesserungen sowie umfangreichen Tests (u. a. DaCapo, SPECjbb2015, SPECjvm2008, Heapothesys); Anwender berichten von erfolgreichen Einsätzen unter Last. Zum Aktivieren des generationalen Modus ist -XX:+UnlockExperimentalVMOptions nicht mehr nötig. Alle übrigen Optionen und Defaults bleiben gleich und bestehende Startskripte funktionieren weiter.

Beim Blick auf die Vielzahl der sehr unterschiedlichen neuen und erneuerten Features zeigt sich, dass Java 25 auch wieder ein spannendes Release ist. Auch wenn für uns Entwickler auf den ersten Blick scheinbar gar nicht so viel Neues dabei ist. Vieles sind Wiedervorlagen aus früheren Preview-Versionen. Aber genau das zeigt, wie stabil und durchdacht sich Java weiterentwickelt. Und außerdem ist enorm viel unter der Haube passiert: von Performance-Optimierungen über Sicherheitsverbesserungen bis hin zu Weichenstellungen für die Zukunft, etwa in der Kryptografie und der Speicherverwaltung. Java bleibt damit eine moderne, leistungsfähige Plattform. Und im März 2026 steht mit dem OpenJDK 26 die nächste Version vor der Tür. Die Versionen 25 und 26 sind übrigens die einzigen, die mit der Jahreszahl ihrer Erscheinung übereinstimmen. Ab Java 27 müssen wir dann wieder überlegen, welche Version gerade aktuell ist.

Zum Vertiefen der hier genannten JEPs empfiehlt sich als Startpunkt die OpenJDK-25-Projektseite. Und es gibt natürlich auch eine ausführliche Liste aller Änderungen in den Release Notes. Zudem lohnt sich auch immer mal ein Blick auf die JEP-Drafts. Dort warten noch einige Themen auf ihre Veröffentlichung, wie Light-Weight JSON API, Null-Restricted and Nullable Types, Value Classes and Objects oder Integrity by Default. Uns Java-Entwicklern dürfte in Zukunft also nicht so schnell langweilig werden.


(mdo)



Source link

Entwicklung & Code

BentoPDF 1.0: Neues Open-Source-PDF-Werkzeug fürs Self-Hosting


close notice

This article is also available in
English.

It was translated with technical assistance and editorially reviewed before publication.

Mit BentoPDF 1.0.0 steht ab sofort ein neues Open-Source-Werkzeug für die PDF-Verarbeitung bereit. Besonderen Wert legen die Entwickler auf eine lokale Datenverarbeitung ohne Cloud-Anbindung. Das erste Major Release bringt zahlreiche Funktionen für professionelle Workflows mit.

Weiterlesen nach der Anzeige

Zu den wichtigsten Updates gehört die Posterize-Funktion, die große PDFs in mehrere kleinere Dokumente für Posterdrucke aufteilt. Die Linearize-Funktion optimiert PDFs für schnelles Web-Viewing durch progressive Ladeoptimierung. Hinzu kommen Bulk-Operationen: Mehrere PDFs lassen sich gleichzeitig komprimieren oder in einzelne Seiten zerlegen.

Das Tool entfernt automatisch leere Seiten aus Dokumenten und bietet einen Interleave-Merge-Modus, bei dem mehrere PDFs verzahnt zusammengeführt werden – praktisch etwa beim Scannen von Vorder- und Rückseiten. Zudem können Dateien als Anhänge direkt in PDFs eingebettet werden.

Zudem haben die Entwickler seit der Betaphase die OCR-Funktionen grundlegend überarbeitet. Hier sind Whitelist-Zeichensätze für präzisere Texterkennung neu hinzugekommen. Die Performance bei Split-, Merge- und Komprimierungsvorgängen hat das Projekt optimiert und den Speicherverbrauch bei Bulk-Operationen reduziert.

Für die Bereitstellung stehen verschiedene Docker-Konfigurationen bereit, die sich sowohl für Entwicklungsumgebungen als auch für Produktivbetrieb eignen. Die überarbeitete Docker-Compose-Konfiguration soll die Einrichtung von BentoPDF erleichtern. Nutzer von Unraid finden ein vorgefertigtes Template für die Integration in ihre Infrastruktur.

Das Projekt steht auf GitHub zur Verfügung, wo interessierte Nutzer ebenfalls eine vollständige Liste der unterstützten Features finden. Die vollständigen technischen Details und Installationsanleitungen finden sich in der Projektdokumentation.

Weiterlesen nach der Anzeige


(fo)



Source link

Weiterlesen

Entwicklung & Code

Browser-Engine Servo veröffentlicht erstes offizielle Release 0.0.1


Das Servo-Projekt hat mit Version 0.0.1 erstmals ein offiziell getaggtes Release der Rust-basierten Browser-Engine veröffentlicht. Allerdings betont das Entwicklerteam, dass es sich dabei im Wesentlichen um einen Nightly-Build vom 19. Oktober 2025 handelt, der zusätzlichen manuellen Tests unterzogen wurde.

Weiterlesen nach der Anzeige

Servo ist eine quelloffene Web-Rendering-Engine, die ursprünglich von Mozilla initiiert wurde und heute unter dem Dach der Linux Foundation Europe weiterentwickelt wird. Die Engine setzt konsequent auf die Programmiersprache Rust und zielt darauf ab, Web-Technologien in verschiedene Anwendungen einbettbar zu machen. Seit dem überraschenden Comeback 2023 arbeitet das Projekt kontinuierlich an der Verbesserung der Kompatibilität mit aktuellen Web-Anwendungen.

Die aktuelle Version 0.0.1 bringt keine grundlegend neuen Funktionen im Vergleich zu den bisherigen Nightly-Builds. Der Hauptunterschied liegt im Release-Prozess selbst: Das Team führt ab sofort zusätzliche manuelle Tests durch, bevor eine Version offiziell getaggt wird. Künftig soll monatlich ein so getesteter Release erscheinen, um Nutzern einen zuverlässigeren Referenzpunkt als die täglichen Nightly-Builds zu bieten.

Eine technische Neuerung gibt es dennoch: Erstmals stellt das Projekt vorkompilierte Binaries für ARM-basierte Macs bereit. Damit erweitert Servo seine Plattformunterstützung, die neben den Desktop-Systemen macOS (x86-64 und ARM), Linux und Windows auch die mobilen Plattformen Android und OpenHarmony umfasst. Die Downloads umfassen servoshell, einen einfachen Demo-Browser, der die Rendering-Fähigkeiten der Engine demonstriert.

Das Servo-Team verfolgt mit seinen Releases einen unkonventionellen Ansatz. Es gibt derzeit keine Pläne, die Versionen zum Beispiel auf Crates.io oder in plattformspezifischen App-Stores zu veröffentlichen. Stattdessen beschränkt sich die Distribution auf getaggte Releases auf GitHub. Damit wollen die Entwickler den noch experimentellen Charakter des Projekts deutlich machen, das sich aktuell primär an Entwickler richtet, die Web-Rendering in eigene Anwendungen integrieren möchten. Dafür bietet Servo eine dedizierte WebView API, die sich aktuell noch im Aufbau befindet. Für Endanwender ist Servo noch nicht gedacht.

Weiterlesen nach der Anzeige

Dennoch hat Servo in den vergangenen Monaten deutliche Fortschritte bei der Web-Kompatibilität gemacht. Seit Mai kann die Engine zum Beispiel komplexe Webanwendungen wie Gmail darstellen. Die Unterstützung für moderne Web-Standards wie CSS-Nesting, Shadow DOM und verschiedene Web-APIs haben die Entwickler kontinuierlich ausgebaut. Allerdings befinden sich viele dieser Funktionen noch im experimentellen Stadium und müssen über spezielle Optionen aktiviert werden.

Für die Zukunft plant das Servo-Team, im monatlichen Rhythmus neue getaggte Versionen zu veröffentlichen. Der Prozess soll dabei relativ simpel bleiben: Ein aktueller Nightly-Build wird ausgewählt, manuell getestet und bei erfolgreicher Validierung als offizieller Release markiert. Die Servo-Website bietet einen Troubleshooting-Guide für häufige Probleme.

Alle Informationen zum Release 0.0.1 finden sich im Blog. Die Binaries stehen ab sofort auf GitHub zum Download bereit.


(fo)



Source link

Weiterlesen

Entwicklung & Code

Software Testing: Praxisnahes Softwaretesten mit Java


In seinem Podcast spricht Richard Seidl in dieser Folge mit dem freiberuflichen Berater Pascal Moll, seit 2024 zudem Dozent an der Technischen Hochschule Würzburg-Schweinfurt (THWS) für die Vorlesung „Software Testing“, über die Grundlagen von Softwaretests und Testautomatisierung in Java. Anlass ist Pascal Molls Buch „Software Testing Kompakt“, das Einsteigern praxisnahen Zugang zu Testarten, Automatisierung und Tools wie JUnit, Wiremock und Selenium bietet. Wie er im Podcast mitteilt, wurde er in seinen Vorlesungen und Vorträgen bereits häufig gefragt, wie man denn anfangen würde, wenn man ins Testing einsteigen will.

Weiterlesen nach der Anzeige

Die beiden sprechen darüber, wie wichtig Basiswissen für Entwicklerinnen und Entwickler sowie Tester ist, welchen Stellenwert Testdaten und Nachhaltigkeit haben und worauf man bei Java-spezifischen Eigenheiten achten sollte.

Bei diesem Podcast dreht sich alles um Softwarequalität: Ob Testautomatisierung, Qualität in agilen Projekten, Testdaten oder Testteams – Richard Seidl und seine Gäste schauen sich Dinge an, die mehr Qualität in die Softwareentwicklung bringen.

Die aktuelle Ausgabe ist auch auf Richard Seidls Blog verfügbar: „Praxisnahes Softwaretesten mit Java – Pascal Moll“ und steht auf YouTube bereit.


(mai)



Source link

Weiterlesen

Beliebt