Java 16 | Java 15 | Java 14 | Java 13 | Java 12 | Java 11 | Java 10 | Java 9 | Java 8
Java 9
Release notes | Specification | JEPs
JEP Name Category Summary
110 HTTP/2 Client (Incubator)
Define a new HTTP client API that implements HTTP/2 and WebSocket, and can replace the legacy HttpURLConnection API. The API will be delivered as an incubator module, as defined in JEP 11, with JDK 9. This implies:
222 jshell: The Java Shell (Read-Eval-Print Loop)
Provide an interactive tool to evaluate declarations, statements, and expressions of the Java programming language, together with an API so that other applications can leverage this functionality.
240 Remove the JVM TI hprof Agent
Remove the hprof agent from the JDK.
241 Remove the jhat Tool
Remove the antiquated jhat tool.
298 Remove Demos and Samples
Remove the outdated and unmaintained demos and samples.
214 Remove GC Combinations Deprecated in JDK 8
Remove the GC combinations that were previously deprecated in JDK 8 via JEP 173.
291 Deprecate the Concurrent Mark Sweep (CMS) Garbage Collector
Deprecate the Concurrent Mark Sweep (CMS) garbage collector, with the intent to stop supporting it in a future major release.
289 Deprecate the Applet API
Deprecate the Applet API, which is rapidly becoming irrelevant as web-browser vendors remove support for Java browser plug-ins. Guide developers to alternative technologies such as Java Web Start or installable applications.
102 Process API Updates
Improve the API for controlling and managing operating-system processes.
143 Improve Contended Locking
Improve the performance of contended Java object monitors.
158 Unified JVM Logging
Introduce a common logging system for all components of the JVM.
165 Compiler Control
This JEP proposes an improved way to control the JVM compilers. It enables runtime manageable, method dependent compiler flags. (Immutable for the duration of a compilation.)
193 Variable Handles
Define a standard means to invoke the equivalents of various java.util.concurrent.atomic and sun.misc.Unsafe operations upon object fields and array elements, a standard set of fence operations for fine-grained control of memory ordering, and a standard reachability-fence operation to ensure that a referenced object remains strongly reachable.
197 Segmented Code Cache
Divide the code cache into distinct segments, each of which contains compiled code of a particular type, in order to improve performance and enable future extensions.
199 Smart Java Compilation, Phase Two
Improve the sjavac tool so that it can be used by default in the JDK build, and generalize it so that it can be used to build large projects other than the JDK.
200 The Modular JDK
Use the Java Platform Module System, specified by JSR 376 and implemented by JEP 261, to modularize the JDK.
201 Modular Source Code
Reorganize the JDK source code into modules, enhance the build system to compile modules, and enforce module boundaries at build time.
211 Elide Deprecation Warnings on Import Statements
As of Java SE 8, java compilers are required by reasonable interpretations of the Java Language Specification to issue deprecation warnings when a deprecated type is imported by name or when a deprecated member (method, field, nested type) is imported statically. These warnings are uninformative and should not be required. Deprecation warnings at actual uses of deprecated members should remain.
212 Resolve Lint and Doclint Warnings
The JDK code base contains numerous lint and doclint errors as reported by javac. These warnings should be resolved, at least for the fundamental parts of the platform.
213 Milling Project Coin
The small language changes included in Project Coin / JSR 334 as part of JDK 7 / Java SE 7 have been easy to use and have worked well in practice. However, a few amendments could address the rough edges of those changes. In addition, using underscore ("_") as an identifier, which generates a warning as of Java SE 8, should be turned into an error in Java SE 9. It is also proposed that interfaces be allowed to have private methods.
215 Tiered Attribution for javac
Implement a new method type-checking strategy in javac to speed up attribution of poly expression in argument position.
216 Process Import Statements Correctly
Fix javac to properly accept and reject programs regardless of the order of import statements and extends and implements clauses.
217 Annotations Pipeline 2.0
Redesign the javac annotations pipeline to better address the requirements of annotations and tools that process annotations.
219 Datagram Transport Layer Security (DTLS)
Define an API for Datagram Transport Layer Security (DTLS) version 1.0 (RFC 4347) and 1.2 (RFC 6347).
220 Modular Run-Time Images
Restructure the JDK and JRE run-time images to accommodate modules and to improve performance, security, and maintainability. Define a new URI scheme for naming the modules, classes, and resources stored in a run-time image without revealing the internal structure or format of the image. Revise existing specifications as required to accommodate these changes.
221 New Doclet API
Provide a replacement for the Doclet API to leverage appropriate Java SE and JDK APIs, and update the standard doclet to use the new API.
223 New Version-String Scheme
Define a version-string scheme that easily distinguishes major, minor, and security-update releases, and apply it to the JDK.
224 HTML5 Javadoc
Enhance the javadoc tool to generate HTML5 markup.
225 Javadoc Search
Add a search box to API documentation generated by the standard doclet that can be used to search for program elements and tagged words and phrases within the documentation. The search box appears in the header of all pages generated by the standard doclet.
226 UTF-8 Property Resource Bundles
Define a means for applications to specify property files encoded in UTF-8, and extend the ResourceBundle API to load them.
227 Unicode 7.0
Upgrade existing platform APIs to support version 7.0 of the Unicode Standard.
228 Add More Diagnostic Commands
Define additional diagnostic commands, in order to improve the diagnosability of Hotspot and the JDK.
229 Create PKCS12 Keystores by Default
Transition the default keystore type from JKS to PKCS12.
232 Improve Secure Application Performance
Improve the performance of applications that are run with a security manager installed.
231 Remove Launch-Time JRE Version Selection
Remove the ability to request, at JRE launch time, a version of the JRE that is not the JRE being launched.
233 Generate Run-Time Compiler Tests Automatically
Develop a tool to test the run-time compilers by automatically generating test cases.
235 Test Class-File Attributes Generated by javac
Write tests to verify the correctness of class-file attributes generated by javac.
236 Parser API for Nashorn
Define a supported API for Nashorn's ECMAScript abstract syntax tree.
237 Linux/AArch64 Port
Port JDK 9 to Linux/AArch64.
238 Multi-Release JAR Files
Extend the JAR file format to allow multiple, Java-release-specific versions of class files to coexist in a single archive.
243 Java-Level JVM Compiler Interface
Develop a Java based JVM compiler interface (JVMCI) enabling a compiler written in Java to be used by the JVM as a dynamic compiler.
244 TLS Application-Layer Protocol Negotiation Extension
Extend the package to support the TLS Application Layer Protocol Negotiation (ALPN) Extension, which provides the means to negotiate an application protocol for a TLS connection.
245 Validate JVM Command-Line Flag Arguments
Validate the arguments to all JVM command-line flags so as to avoid crashes, and ensure that appropriate error messages are displayed when they are invalid.
246 Leverage CPU Instructions for GHASH and RSA
Improve the performance of GHASH and RSA cryptographic operations by leveraging recently-introduced SPARC and Intel x64 CPU instructions.
247 Compile for Older Platform Versions
Enhance javac so that it can compile Java programs to run on selected older versions of the platform.
248 Make G1 the Default Garbage Collector
Make G1 the default garbage collector on 32- and 64-bit server configurations.
249 OCSP Stapling for TLS
Implement OCSP stapling via the TLS Certificate Status Request extension (section 8 of RFC 6066) and the Multiple Certificate Status Request Extension (RFC 6961).
250 Store Interned Strings in CDS Archives
Store interned strings in class-data sharing (CDS) archives.
251 Multi-Resolution Images
Define a multi-resolution image API so that images with resolution variants can easily be manipulated and displayed.
252 Use CLDR Locale Data by Default
Use locale data from the Unicode Consortium's Common Locale Data Repository (CLDR) by default.
253 Prepare JavaFX UI Controls & CSS APIs for Modularization
Define public APIs for the JavaFX UI controls and CSS functionality that is presently only available via internal APIs and will hence become inaccessible due to modularization.
254 Compact Strings
Adopt a more space-efficient internal representation for strings.
255 Merge Selected Xerces 2.11.0 Updates into JAXP
Upgrade the version of the Xerces XML parser included in the JDK with important changes from Xerces 2.11.0.
256 BeanInfo Annotations
Replace @beaninfo Javadoc tags with proper annotations, and process those annotations at run time to generate BeanInfo classes dynamically.
257 Update JavaFX/Media to Newer Version of GStreamer
Update the version of GStreamer included in FX/Media in order to improve security, stability, and performance.
258 HarfBuzz Font-Layout Engine
Replace the existing ICU OpenType font-layout engine with HarfBuzz.
259 Stack-Walking API
Define an efficient standard API for stack walking that allows easy filtering of, and lazy access to, the information in stack traces.
260 Encapsulate Most Internal APIs
Encapsulate most of the JDK's internal APIs by default so that they are inaccessible at compile time, and prepare for a future release in which they will be inaccessible at run time. Ensure that critical, widely-used internal APIs are not encapsulated, so that they remain accessible until supported replacements exist for all or most of their functionality.
261 Module System
Implement the Java Platform Module System, as specified by JSR 376, together with related JDK-specific changes and enhancements.
262 TIFF Image I/O
Extend the standard set of Image I/O plugins to support the TIFF image format.
263 HiDPI Graphics on Windows and Linux
Implement HiDPI graphics on Windows and Linux.
264 Platform Logging API and Service
Define a minimal logging API which platform classes can use to log messages, together with a service interface for consumers of those messages. A library or application can provide an implementation of this service in order to route platform log messages to the logging framework of its choice. If no implementation is provided then a default implementation based upon the java.util.logging API is used.
265 Marlin Graphics Renderer
Update Java 2D to use the Marlin Renderer as the default graphics rasterizer.
266 More Concurrency Updates
An interoperable publish-subscribe framework, enhancements to the CompletableFuture API, and various other improvements.
267 Unicode 8.0
Upgrade existing platform APIs to support version 8.0 of the Unicode Standard.
268 XML Catalogs
Develop a standard XML Catalog API that supports the OASIS XML Catalogs standard, v1.1. The API will define catalog and catalog-resolver abstractions which can be used with the JAXP processors that accept resolvers.
269 Convenience Factory Methods for Collections
Define library APIs to make it convenient to create instances of collections and maps with small numbers of elements, so as to ease the pain of not having collection literals in the Java programming language.
270 Reserved Stack Areas for Critical Sections
Reserve extra space on thread stacks for use by critical sections, so that they can complete even when stack overflows occur.
271 Unified GC Logging
Reimplement GC logging using the unified JVM logging framework introduced in JEP 158.
272 Platform-Specific Desktop Features
Define a new public API to access platform-specific desktop features such as interacting with a task bar or dock, or listening for system or application events.
273 DRBG-Based SecureRandom Implementations
Implement the three Deterministic Random Bit Generator (DRBG) mechanisms described in NIST 800-90Ar1.
274 Enhanced Method Handles
Enhance the MethodHandle, MethodHandles, and MethodHandles.Lookup classes of the java.lang.invoke package to ease common use cases and enable better compiler optimizations by means of new MethodHandle combinators and lookup refinement.
275 Modular Java Application Packaging
Integrate features from Project Jigsaw into the Java Packager, including module awareness and custom run-time creation.
276 Dynamic Linking of Language-Defined Object Models
Provide a facility for linking high-level operations on objects such as "read a property", "write a property", "invoke a callable object", etc., expressed as names in INVOKEDYNAMIC call sites. Provide a default linker for the usual semantics of these operations on plain Java objects, as well as a facility for installing language-specific linkers.
277 Enhanced Deprecation
Revamp the @Deprecated annotation, and provide tools to strengthen the API life cycle.
278 Additional Tests for Humongous Objects in G1
Develop additional white-box tests for the Humongous Objects feature of the G1 Garbage Collector.
279 Improve Test-Failure Troubleshooting
Automatically collect diagnostic information which can be used for further troubleshooting in case of test failures and timeouts.
280 Indify String Concatenation
Change the static String-concatenation bytecode sequence generated by javac to use invokedynamic calls to JDK library functions. This will enable future optimizations of String concatenation without requiring further changes to the bytecode emitted by javac.
281 HotSpot C++ Unit-Test Framework
Enable and encourage the development of C++ unit tests for HotSpot.
282 jlink: The Java Linker
Create a tool that can assemble and optimize a set of modules and their dependencies into a custom run-time image as defined in JEP 220.
283 Enable GTK 3 on Linux
Enable Java graphical applications, whether based on JavaFX, Swing, or AWT, to use either GTK 2 or GTK 3 on Linux.
284 New HotSpot Build System
Rewrite the HotSpot build system using the build-infra framework.
285 Spin-Wait Hints
Define an API to allow Java code to hint that a spin loop is being executed.
287 SHA-3 Hash Algorithms
Implement the SHA-3 cryptographic hash functions (BYTE-only) specified in NIST FIPS 202.
288 Disable SHA-1 Certificates
Improve the security configuration of the JDK by providing a more flexible mechanism to disable X.509 certificate chains with SHA-1 based signatures.
290 Filter Incoming Serialization Data
Allow incoming streams of object-serialization data to be filtered in order to improve both security and robustness.
292 Implement Selected ECMAScript 6 Features in Nashorn
Implement, in Nashorn, a selected set of the many new features introduced in the 6th edition of ECMA-262, also known as ECMAScript 6, or ES6 for short.
294 Linux/s390x Port
Port JDK 9 to Linux/s390x.
295 Ahead-of-Time Compilation
Compile Java classes to native code prior to launching the virtual machine.
297 Unified arm32/arm64 Port
Integrate the unified port of HotSpot for arm32 and arm64, contributed by Oracle, into the JDK.
299 Reorganize Documentation
Update the organization of the documents in the JDK, in both the source repositories and the generated docs.