Java 25 Released and New Leyden EA Builds
by David Delabassee
Welcome to the latest OpenJDK Quality Outreach update.
JDK 25[1] and JavaFX 25[2] were released as planned a few days ago. Additional Java 25 materials, including the "Road to 25" video series, are listed in the "Topics of Interest" section at the end of this update. If you missed it, you can also rewatch the Java 25 launch stream[3].
Thank you to all the projects that contributed to this release by testing early access builds, providing feedback, or identifying issues. Your participation helps shape the Java platform!
Let’s now turn our attention to JDK 26[4], which is expected to enter the Rampdown Phase in just over two months. As of today, three JEPs have already been targeted for inclusion in JDK 26. If you use JavaFX, please pay attention to the time-sensitive heads-up below.
[1] https://blogs.oracle.com/java/post/the-arrival-of-java-25
[2] https://inside.java/2025/09/23/javafx-25/
[3] https://inside.java/2025/09/17/java25-launch-stream/
[4] https://openjdk.org/projects/jdk/26/
# Heads-up - JavaFX 26: Temporary switch to macOS Metal Rendering Pipeline
On macOS, the default JavaFX rendering pipeline has been temporarily switched to Metal since JavaFX 26 early access build 5. This change will remain in place until October 8, 2025. The goal is to enable wider testing of the Metal rendering pipeline.
If you need to revert to the previous macOS ES2 pipeline, you can do so by adding the `-Dprism.order=es2` flag to your Java command.
The latest JavaFX 26 EA builds are now available for download[5] and testing. You can share your feedback on the openjfx-dev[6] list (registration required), through JBS[7] or bugreport.java.com[8].
[5] https://jdk.java.net/javafx26/
[6] https://mail.openjdk.org/mailman/listinfo/openjfx-dev
[7] https://bugs.openjdk.org/
[8] https://bugreport.java.com
# Heads-up - New Leyden Early-Access Builds
The purpose of Leyden early eccess builds is to prototype improvements in startup time, time to peak performance, and footprint of Java programs, with the hope that some of these enhancements can eventually be incorporated into future JDK releases. The Java community is invited to test these prototypes and provide feedback to the Project Leyden team.
The latest Leyden "premain" prototype[9] introduces several experimental Ahead-of-Time (AOT) optimizations not yet part of the JDK mainline. These include AOT code compilation for frequently used methods, AOT generation of dynamic proxies and reflection data to improve start-up time, and a cache for failed class lookups to speed up repeated attempts. All these experimental features are, in the Leyden EA2 builds, enabled by default when creating an AOT cache and can be disabled via specific flags.
More details on how to use these features can be found in the EA2 Release Notes[10]. Feedback should be sent to the leyden-dev[11] mailing list (registration required).
[9] https://jdk.java.net/leyden/
[10] https://github.com/openjdk/leyden/blob/leyden-ea2-release-notes/README.md
[11] https://mail.openjdk.org/mailman/listinfo/leyden-dev
# JDK 26 Early-Access Builds
The JDK 26 early access builds 16 are available[12], and are provided under the GNU General Public License v2, with the Classpath Exception. You can review the Release Notes here[13].
## JEPs targeted to JDK 26, so far:
- JEP 504: Remove the Applet API
- JEP 517: HTTP/3 for the HTTP Client API
- JEP 522: G1 GC: Improve Throughput by Reducing Synchronization
## Changes in recent JDK 26 EA builds that may be of interest:
- JDK-8244336: Restrict algorithms at JCE layer
- JDK-8366911: (fs) Remove support for normalizing file names to Unicode normalized form D (macOS)
- JDK-8367112: HttpClient does not support Named Groups set on SSLParameters
- JDK-8367031: [backout] Change java.time month/day field types to 'byte'
- JDK-8366434: THP not working properly with G1 after JDK-8345655
- JDK-8365086: CookieStore.getURIs() and get(URI) should return an immutable List
- JDK-8364993: JFR: Disable jdk.ModuleExport in default.jfc
- JDK-8364556: JFR: Disable SymbolTableStatistics and StringTableStatistics in default.jfc
- JDK-8359443: Make jcmd command available in the headless JDK RPM
- JDK-8362304: Fix JDWP spec w.r.t. OPAQUE_FRAME and INVALID_SLOT errors
- JDK-8277585: Remove the terminally deprecated finalize() method from javax.imageio.stream APIs
- JDK-8362448: Make use of the Double.toString(double) algorithm in java.text.DecimalFormat
- JDK-8309400: JDI spec needs to clarify when OpaqueFrameException and NativeMethodException are thrown
- JDK-8363972: Lenient parsing of minus sign pattern in DecimalFormat/CompactNumberFormat
- JDK-8329829: HttpClient: Add a BodyPublishers.ofFileChannel method
- JDK-8364227: MBeanServer registerMBean throws NPE
- JDK-8361614: Missing sub-int value validation in the Class-File API
- JDK-8361635: Missing List length validation in the Class-File API
- JDK-8364751: ConstantBootstraps.explicitCast contradictory specification for null-to-primitive
- JDK-8361613: System.console() should only be available for interactive terminal
- JDK-8365676: javac incorrectly allows calling interface static method via type variable
Note: A more exhaustive list of changes can be found here[14].
[12] https://jdk.java.net/26/
[13] https://jdk.java.net/26/release-notes
[14] https://github.com/openjdk/jdk/compare/jdk-26+10...jdk-26+16
# Topics of Interest
- Java 25 Launch Stream
https://inside.java/2025/09/17/java25-launch-stream/
- The Arrival of Java 25
https://blogs.oracle.com/java/post/the-arrival-of-java-25
- JDK 25: G1/Parallel/Serial GC changes
https://tschatzl.github.io/2025/08/12/jdk25-g1-serial-parallel-gc-changes...
- JavaFX 25 Highlights
https://inside.java/2025/09/23/javafx-25/
- Road To 25: All API Additions From Java 21 to 25
https://inside.java/2025/09/09/roadto25-api/
- Road To 25: How to Handle Security Changes in Java 25
https://inside.java/2025/09/07/roadto25-security/
- Road To 25: Java 21 ⮕ 25 - Performance and Runtime Enhancements
https://inside.java/2025/09/05/roadto25-performance/
- Road To 25: All New Java Language Features Since Java 21
https://inside.java/2025/08/31/roadto25-java-language/
- Road To 25: Ahead-of-Time Computation
https://inside.java/2025/08/28/roadto25-aot/
- Road To 25: How to Upgrade to Java 25
https://inside.java/2025/08/24/roadto25-upgrade/
- JVMLS: Growing the Java Language
https://inside.java/2025/08/21/jvmls-growing-java-language/
- JVMLS: Auto-Vectorization in HotSpot
https://inside.java/2025/08/16/jvmls-hotspot-auto-vectorization/
- JVMLS: Paths to Support Additional Numeric Types on the Java Platform
https://inside.java/2025/09/21/jvmls-java-additional-numeric-types/
- Java Architects Answer Your Questions
https://inside.java/2025/08/14/newscast-97/
- GC-Agnostic Load Barriers for Ahead-of-Time Compilation
https://inside.java/2025/08/27/thesis-gc-agnostic-load-barriers/
~
This concludes the update. Please don’t hesitate to reach out if you encounter any issues while testing your projects with the latest JDK 26 early access builds.
P.S.: If you no longer wish to receive these Quality Outreach updates, please let me know.
--David
1 day, 10 hours