Welcome to the final OpenJDK Quality Outreach update of 2024!
JDK 24, scheduled for General Availability on March 18, 2025 [1], is now in Rampdown Phase One (RDP1) [2]. At this point, the overall JDK 24 feature set is frozen and only low-risk enhancements might still be considered. You will find below the final list of the 24 JEPs that were integrated into JDK 24 as well as JDK 24 technical materials in the last section.
This QO update also covers 3 important heads-ups related to security, integrity and JDK 24.
The next key milestone is early February with the first JDK 24 Release Candidate builds. That means that we have a few weeks, modulo the end of year break, to find and hopefully address any issue that your projects might encounter. So, please let us know if you encounter any issue with the JDK early-access builds.
[1] https://openjdk.org/projects/jdk/24/
[2] https://mail.openjdk.org/pipermail/jdk-dev/2024-December/009672.html
Heads-up - JDK 24: Permanently Disabling the Security Manager
Introduced to enforce the principle of the least privilege, the Security Manager was designed to prevent unauthorized code from accessing sensitive resources (ex. files, network connections, etc.). While effective in theory, it has fallen short in practice for multiple reasons: complexity, limited adoption, maintenance overhead and evolving threat landscape.
In Java 17, the Security Manager was deprecated for removal under JEP 411 [3]. In JDK 24, its functionality will be effectively disabled via JEP 486 [4]. Key changes include:
Developers and enterprises using older Java versions or legacy applications relying on the Security Manager will retain access until JDK 24. Beyond that, they are encouraged to transition to alternative sandboxing and API interception mechanisms.
Call to Action
The deprecation of the Security Manager in JDK 17 had little to no impact on most Java developers. Warnings issued in JDK 17–23 generated minimal discussion in the Java ecosystem, highlighting its limited relevance. Furthermore, major frameworks and tools (ex. Jakarta EE, Ant, Tomcat, etc.) have already removed support for the Security Manager, reinforcing the trend.
For applications still dependent on the Security Manager, the JDK offers options to identify and address its usage:
These tools give code maintainers the necessary insights to transition away from the Security Manager before its complete removal in future JDK releases. By taking these steps, you will ensure a smooth transition from the Security Manager while adopting more effective security practices.
This is a summary; for more details, make sure to read JEP 486 [4].
[3] https://openjdk.org/jeps/411
[4] https://openjdk.org/jeps/486
[5] https://dev.java/learn/jvm/tools/core/jdeprscan/
Heads-up - JDK 24: Prepares Restricted Native Access
Any interaction between Java code and native code, be it via the Java Native Interface (JNI) API or the Foreign Function & Memory (FFM) API, is risky in the sense that it can compromise the integrity of applications and of the Java Platform itself, for example by causing JVM crashes, even after the native code completed execution. According to the policy of integrity by default, all JDK features that are capable of breaking integrity must obtain explicit approval from the application’s developer. JDK 24, by means of JEP 472 [6], prepares that by aligning the behaviors of JNI and FFM by:
Note that this is a change for JNI, which used to not trigger such warnings, as well as for FFM, which used to forbid restricted operations by default. Starting with JDK 24, both APIs behave uniformly by printing warnings. In the future, both APIs will throw exceptions instead. The intent is neither to discourage the use of, deprecate, or even remove JNI nor to restrict the behavior of native code called via JNI or FFM. The goal is to ensure that applications and the Java Platform have integrity by default while giving application operators the tools they need to selectively opt-out where needed.
This is a summary; for more details, please read the full Heads-Up [7] and JEP 472 [6].
[6] https://openjdk.org/jeps/472
[7] https://inside.java/2024/12/09/quality-heads-up/
Heads-up - JDK 24: Security Properties Files Inclusion
Managing security properties across multiple JDK releases can be a challenge, particularly in environments requiring centralized control and distinct security profiles. To address this and starting with JDK 24, the Java Platform now allows the main security properties file (`${java.home}/conf/security/java.security`) or any file specified via the `java.security.properties` system property to include additional files. This inclusion is recursive, allowing for nested configurations, provided no cycles occur.
The `include` keyword is reserved and cannot be used to define security properties, as any attempt to do so results in an unchecked `IllegalArgumentException`. The inclusion mechanism enhances security by explicitly listing files in the main configuration file, preventing misconfigurations by throwing a fatal error if a file is missing or inaccessible. It also forbids including directories or URLs, ensuring strict control over which files are included. Users must ensure proper permissions for included files to avoid tampering, such as enforcing secure file permissions. The system supports a clear priority for security property overrides based on the order of inclusion, and updates to a single file automatically propagate across all configurations.
This enhancement offers better control and adaptability over Java security properties for developers, system administrators and infrastructure engineers.
This is a summary; for more details, please read the full Heads-Up [8] and the JDK 24 release notes [9].
[8] https://inside.java/2024/12/10/quality-heads-up/
[9] https://jdk.java.net/24/release-notes#JDK-8319332
JDK 24 Early-Access Builds
The JDK 24 early-access builds 28 are available [10] and are provided under the GNU General Public License v2, with the Classpath Exception. The Release Notes are available here [11].
JEPs integrated into JDK 24:
Changes in recent JDK 24 builds that may be of interest:
Note: A complete list of changes can be found here [12].
[11] https://jdk.java.net/24/release-notes
[12] https://github.com/openjdk/jdk/compare/jdk-24+21...jdk-24+28
Topics of Interest
- Java 24 Performance Improvements & Deprecations
https://www.youtube.com/watch?v=oTc16DAMTqg
- Java 24 Language & API Changes
https://inside.java/2024/12/05/newscast-81/
- Java 24 Stops Pinning Virtual Threads (Almost)
https://inside.java/2024/11/21/newscast-80/
- Detoxifying the JDK Source Code
https://stuartmarks.wordpress.com/2024/12/12/detoxifying-the-jdk-source-code/
- Better Java Streams with Gatherers - JEP Cafe
https://inside.java/2024/11/26/jepcafe23/
- Java Language Futures - Fall 2024 Edition
https://inside.java/2024/10/30/devoxxbelgium-java-language-futures/
- Ask the Java Architects
https://inside.java/2024/11/14/devoxxbelgium-ask-architects/
- Pattern Matching in Java - Past, Present, Future
https://inside.java/2024/11/11/devoxxbelgium-pattern-matching/
- Monitoring Java Application Security with JDK tools and JFR Events
https://inside.java/2024/11/17/devoxxbelgium-security/
- ZGC Automatic Heap Sizing #JVMLS
https://inside.java/2024/11/09/jvmls-zgc/
- Postcards from the Peak of Complexity
https://inside.java/2024/11/03/devoxxbelgium-complexity-peak/
- Release Your (Java) Projects Like OpenJDK
https://inside.java/2024/10/31/newscast-79/
- Are Virtual Threads Going to Make Reactive Programming Irrelevant?
https://inside.java/2024/10/28/javazone-virtual-threads/
- A Sneak Peek at StableValue and SegmentMapper
https://inside.java/2024/10/24/devoxxbelgium-stablevalues/
- Advancing AI by Accelerating Java on Parallel Architectures
https://inside.java/2024/10/23/java-and-ai/
~
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 2025 with Java 24, JavaOne and Java 25!
PS: Please let me know if you don't want to receive these OpenJDK Quality Outreach updates anymore.
--David