Re: JDK 26 Feature Freeze, HTTP/3 and more Heads-Ups
Uwe Schindler <[email protected]> Mon, 8 Dec 2025 12:31:16 +0100
| Newsgroups | gmane.comp.jakarta.lucene.devel |
|---|---|
| Message-ID | <[email protected]> |
Hi David,
Thanks for the update. I installed JDK 26 ea-27 on the Jenkins nodes of
Apache Lucene. The first build succeeded without any problems. I got no
warnings regarding modification of final fields (which is expected as
Lucene disallows setAccessible(true) throughout the whole codebase. Of
course external dependencies may have done this, but without a warning
we're proven that no such dependency exists.
I opened an issue to disallow final field modifications while running
tests of Apache Lucene by enforcing it starting from Java 26:
https://github.com/apache/lucene/issues/15482
Builds of Apache Solr are currently disabled since longer time on the
JDK randomization Jenkins server due to some permament build failures
regarding to checksums of a used library. I will check them out again,
but not today.
Uwe
Am 08.12.2025 um 10:26 schrieb David Delabassee:
> Welcome to the final OpenJDK Quality Outreach update of 2025!
>
> JDK 26, scheduled for General Availability on March 17, 2026, is now
> in Rampdown Phase One[1]. At this stage, the overall JDK 26 feature
> set is frozen, and only low-risk enhancements may still be considered.
> I would like to thank the projects that raised issues addressed in
> this release: JUnit, jOOQ, PDFBox, and Maven.
>
> You will find below the list of JEPs integrated into JDK 26. One JEP
> that stands out is JEP 517, which introduces HTTP/3 support to the
> HTTP Client API. Supporting HTTP/3 is an important advancement. It
> should also be noted that adding this feature to the platform was a
> significant undertaking; the HTTP/3 pull request is the largest
> OpenJDK PR in recent years. The JDK Networking team encourages you to
> try out this new feature (see the related Heads-up below). Another JEP
> that stands out is JEP 504, as the Applet API has finally been removed
> from the platform. We do not expect this to cause any disruption, as
> applets are no longer used and this change was announced well in
> advance. For more background on this effort, please refer to this
> article[2].
>
> Looking ahead, the next milestone is in early February, when the first
> JDK 26 Release Candidate builds will be available. This means we have
> a few weeks, excluding the end-of-year break, to identify and
> hopefully address any issues your projects might encounter. If you
> experience any problems with the JDK early-access builds, please let
> us know as soon as possible.
>
> I will conclude this update with a quick note on JavaOne, as
> registration has just opened. If you plan to attend J1, please let me
> know. It would be great to meet in person and discuss the Quality
> Outreach program.
>
> [1] https://mail.openjdk.org/pipermail/jdk-dev/2025-December/010662.html
> [2] https://inside.java/2025/12/03/applet-removal/
>
>
> # Heads-Up - JDK 26: HTTP/3 Support in HTTP Client API
>
> JEP 517 introduces support for HTTP/3 in the HTTP Client API. While
> HTTP/3 offers similar features to HTTP/2 at the protocol level, its
> key distinction is that it runs over the QUIC protocol using UDP,
> whereas HTTP/2 and HTTP/1.1 operate over TCP.
>
> If your code requests HTTP/3 but it is not available, the client will
> downgrade to HTTP/2 or HTTP/1.1 instead. However, if your code tries
> to enforce HTTP/3 exclusively, a failed attempt will result in an
> exception.
>
> For the first request to a server, the client tries both HTTP/2 (TCP)
> and HTTP/3 (UDP) and uses whichever connects first. Subsequently,
> HttpClient uses the “Alt-Svc” mechanism to learn which protocols the
> server supports, so future requests can use HTTP/3 if supported. For
> additional details, be sure to check these resources[3][4].
>
> ## Call to Action
>
> Although the enhancements to the HTTP Client API appear simple on the
> surface, supporting HTTP/3 on top of QUIC is the result of several
> years of dedicated development effort by the JDK Networking team. As
> this implementation is still new, we encourage you to download the JDK
> 26 early-access builds, try out this feature, and share your feedback
> on the net-dev[5] mailing list (registration required).
>
> [3] https://inside.java/2025/10/30/quality-heads-up/
> [4] https://inside.java/2025/10/22/http3-support/
> [5] https://mail.openjdk.org/mailman/listinfo/net-dev
>
>
> # Heads-Up - JDK 26: HttpClient Supports TLS Named Groups & Signature
> Schemes
>
> Java applications can configure TLS constraints on
> `javax.net.ssl.SSLParameters` during the setup of new connections.
> However, until now, HttpClient ignored the named groups and signature
> schemes set on SSLParameters. Starting with JDK 26,
> `java.net.http.HttpClient` preserves the signature schemes and named
> groups configured via SSLParameters when negotiating the TLS
> handshake. For more information, check this resource[6].
>
> [6] https://inside.java/2025/11/26/quality-heads-up/
>
>
> # Heads-Up - JDK 25: Consistent Behavior of 'new File("")'
>
> On JDK 24 and earlier, the behavior of a `File` instance created from
> an empty string (e.g., `var file = new File("")`) was inconsistent.
> When queried using methods like `file.exists()` and
> `file.isDirectory()`, it appeared to be non-existent because both
> returned false. Similarly, methods such as `canRead()` returned false,
> while `length()`, `lastModified()`, etc. returned 0.
>
> When transformed into an instance representing the absolute path
> (e.g., `var file = new File("").getAbsoluteFile()`), the behavior
> changes: the previously mentioned methods now return meaningful
> results. This is because `new File("").getAbsoluteFile()` maps to the
> current user directory, and the File API behaves accordingly. Since
> both `new File("")` and `new File("").getAbsoluteFile()` should
> represent the same file system entry, this inconsistency is jarring
> and can be surprising.
>
> The newer API in `java.nio.file` avoids this issue and treats both
> `Path.of("")` and `Path.of("").toAbsolutePath()` as the current user
> directory. For example, both `Files.exists(Path.of(""))` and
> `Files.exists(Path.of("").toAbsolutePath())` return true.
>
> JDK 25 fixed this long-standing inconsistency: `new File("")` now
> properly represents the current user directory, so for `var file = new
> File("")`, methods like `file.exists()` and `file.isDirectory()`
> return true. The `File` Javadoc[7] was updated to spell out the
> intended behavior.
>
> For more details, check JDK-8024695[8].
>
> ## Call To Action
>
> Code that relies on the old behavior is often found in unit tests
> (e.g., to intentionally create non-existent files with `new File("")`)
> or in cases where user input is mapped to file system entries (e.g.,
> to treat "no user entry" and "invalid user entry" the same: as an
> absent file. In such cases, the change may manifest as issues related
> to file arguments or configuration.
>
> While fixing such code should be straightforward, identifying it may
> not be, so a thorough test suite is helpful. For dependencies and
> tools, it is recommended to rely on their tests and statements
> regarding JDK 25 compatibility, as only they can address potential
> issues. There is no way to restore the inconsistent behavior of JDK 24
> and earlier.
>
> [7]
> https://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/io/File.html
> [8] https://bugs.openjdk.org/browse/JDK-8024695
>
>
> # JDK 26 Early-Access Builds
>
> The JDK 26 early-access builds 27 are available[9]. You can review the
> Release Notes here[10].
>
> ## JEPs integrated into JDK 26:
> - JEP 500: Prepare to Make Final Mean Final
> - JEP 504: Remove the Applet API
> - JEP 516: Ahead-of-Time Object Caching with Any GC
> - JEP 517: HTTP/3 for the HTTP Client API
> - JEP 522: G1 GC: Improve Throughput by Reducing Synchronization
> - JEP 524: PEM Encodings of Cryptographic Objects (2nd Preview)
> - JEP 525: Structured Concurrency (6th Preview)
> - JEP 526: Lazy Constants (2nd Preview)
> - JEP 529: Vector API (11th Incubator)
> - JEP 530: Primitive Types in Patterns, instanceof, and switch (4th
> Preview)
>
> ## Changes in recent JDK 26 builds that may be of interest:
> - JDK-8208693: HttpClient: Extend the request timeout's scope to cover
> the response body
> - JDK-8365675: Add String Unicode Case-Folding Support
> - JDK-8371470: Java Launcher does not fail when running compact
> java-file with private no-arg constructor
> - JDK-8251928: [macos] the printer DPI always be 72, cause some
> content lost when print out
> - JDK-8268613: jar --validate should check inital entries of a JAR file
> - JDK-8366424: Missing type profiling in generated Record Object methods
> - JDK-8347831: Re-examine version check when cross linking
> - JDK-8373023: Remove the default value of InitialRAMPercentage
> - JDK-8325448: Hybrid Public Key Encryption
> - JDK-8353749: Improve security warning when using JKS or JCEKS keystores
> - JDK-8371259: ML-DSA AVX2 and AVX512 intrinsics and improvements
> - JDK-8346944: Update Unicode Data Files to 17.0.0
> - JDK-8368527: JMX: Add an MXBeans method to query GC CPU time
> - JDK-8371960: Missing null check in AnnotatedType annotation accessor
> methods
> - JDK-8349732: Add support for JARs signed with ML-DSA
> - JDK-8354548: Update CLDR to Version 48.0
> - JDK-8369517: Compilation mismatch for equivalent lambda and method
> reference
> - JDK-8370813: Deprecate AggressiveHeap
> - JDK-8370843: Deprecate AlwaysActAsServerClassMachine and
> NeverActAsServerClassMachine
> - JDK-8366577: Deprecate java.net.Socket::setPerformancePreferences
> - JDK-8212084: G1: Implement UseGCOverheadLimit
> - JDK-8368856: Add a method that performs saturating addition of a
> Duration to an Instant
> - JDK-8343232: Support for PBMAC1 protection on PKCS12 keystores
> - JDK-8369346: Remove default value of and deprecate the MaxRAM flag
> - JDK-8362637: Convert java.nio.ByteOrder to an enum
> - JDK-8369238: Allow virtual thread preemption on some common class
> initialization paths
> - JDK-8364361: [process] java.lang.Process should implement Closeable
> - JDK-8334015: Add Support for UUID Version 7 (UUIDv7) defined in RFC
> 9562
> - JDK-8366575: Remove SDP support
> - JDK-8370387: Remove handling of InterruptedIOException from java.io
> classes
> - JDK-7105350: HttpExchange's attributes are the same as HttpContext's
> attributes
> - JDK-8370057: Correct scale handling of BigDecimal.sqrt
> - JDK-8358942: HttpClient adds Content-Length: 0 for a GET request
> with a BodyPublishers.noBody()
>
> Note: A more exhaustive list of changes can be found here[11].
>
> [9] https://jdk.java.net/26/
> [10] https://jdk.java.net/26/release-notes
> [11] https://github.com/openjdk/jdk/compare/jdk-26+20...jdk-26+27
>
>
> # Valhalla Early-Access Builds
>
> Project Valhalla early-access builds implementing JEP 401 (Value
> Classes and Objects (Preview)) are available[12]. The goal of these
> builds is to establish a milestone and solicit feedback as we work
> toward integrating this functionality into the JDK. More information
> can be found in the feature documentation[13], in this article[14],
> and in this video[15]. Feedback can be sent to the valhalla-dev
> mailing[16] list (registration required).
>
> [12] https://jdk.java.net/valhalla/
> [13] https://openjdk.org/projects/valhalla/value-objects
> [14] https://inside.java/2025/10/27/try-jep-401-value-classes/
> [15] https://youtu.be/Eua3nTkye2Y
> [16] https://mail.openjdk.org/mailman/listinfo/valhalla-dev
>
>
> # JavaFX Direct3D 12 Early-Access Builds
>
> The early-access JavaFX builds implementing the new Direct3D 12
> graphics rendering pipeline for Windows x64 are now available[17]. The
> goal of this EA build is to solicit feedback as we work toward
> integrating this functionality into JavaFX. Feedback can be sent to
> the openjfx-dev[18] mailing list (registration required).
>
> [17] https://jdk.java.net/javafxdirect3d12/
> [18] https://mail.openjdk.org/mailman/listinfo/openjfx-dev
>
>
> # Topics of Interest
>
> - All Features in Java 26 - Inside Java Newscast
> https://inside.java/2025/12/04/newscast-102/
>
> - Java 26 Warns of Deep Reflection - Inside Java Newscast
> https://inside.java/2025/11/20/newscast-101/
>
> - HTTP/3 Support in JDK 26
> https://inside.java/2025/10/22/http3-support/
>
> - So Long and Thanks for All the Applets
> https://inside.java/2025/12/03/applet-removal/
>
> - “From Cowboy Mode to Careful Stewardship” with Mark Reinhold -
> Inside Java Podcast
> https://inside.java/2025/10/27/podcast-041/
>
> - “Amber & Valhalla - Incremental Design and Feature Arcs” with Brian
> Goetz - Inside Java Podcast
> https://inside.java/2025/09/28/podcast-040/
>
> - Value Classes Heap Flattening - What to expect from JEP 401 #JVMLS
> https://inside.java/2025/10/31/jvmls-jep-401/
>
> - Help, My Java Object Vanished (and the GC is Not at Fault)
> https://arraying.de/posts/markword/
>
> - Symbolic Modeling and Transformation of Java Code #JVMLS
> https://inside.java/2025/11/22/jvmls-symbolic-modelling-java-transformation/
>
> - Beyond the Vector API - A Quest for a Lower Level API #JVMLS
> https://inside.java/2025/11/16/jvmls-vector-api/
>
> - Serialization 2.0: A Marshalling Update!
> https://inside.java/2025/11/10/devoxxbelgium-serialization2-0-marshalling-update/
>
> - Pulling the (Foreign) String
> https://cr.openjdk.org/~mcimadamore/panama/strings_ffm.html
>
> - NUMA-Aware Relocation in ZGC
> https://joelsiks.com/posts/zgc-numa-aware-relocation/
>
> - Garbage Collection in Java: Choosing the Correct Collector
> https://inside.java/2025/11/29/devoxxbelgium-choose-correct-gc/
>
> - Evolving ZGC's Pointer Color Palette #JVMLS
> https://inside.java/2025/10/06/jvmls-zgc-colored-pointers/
>
> - Three Upcoming G1 Improvements
> https://inside.java/2025/10/23/newscast-99/
>
> - JDK 25 Security Enhancements
> https://seanjmullan.org/blog/2025/09/23/jdk25
>
> - Performance Improvements in JDK 25
> https://inside.java/2025/10/20/jdk-25-performance-improvements/
>
>
> ~
>
> As always, ping me if you find any issues while testing your
> project(s) with the latest JDK early-access builds. And as the
> year-end is fast approaching, let me wish you all the best for the
> upcoming holidays. See you in 2026 with Java 26, Java 27, and
> hopefully some of you in person at JavaOne 2026!
>
> PS: Please let me know if you don't want to receive these OpenJDK
> Quality Outreach updates anymore.
>
> --David
--
Uwe Schindler
Achterdiek 19, D-28357 Bremen
https://www.thetaphi.de
eMail:[email protected]