Java 9

Release notes - Specification - JEPS

JEP Name Category Summary
222 JEP detail 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 JEP detail Remove the JVM TI hprof Agent
Remove the hprof agent from the JDK.
241 JEP detail Remove the jhat Tool
Remove the antiquated jhat tool.
298 JEP detail Remove Demos and Samples
Remove the outdated and unmaintained demos and samples.
214 JEP detail Remove GC Combinations Deprecated in JDK 8
Remove the GC combinations that were previously deprecated in JDK 8 via JEP 173.
291 JEP detail 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 JEP detail 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 JEP detail Process API Updates Improve the API for controlling and managing operating-system processes.
143 JEP detail Improve Contended Locking Improve the performance of contended Java object monitors.
158 JEP detail Unified JVM Logging Introduce a common logging system for all components of the JVM.
165 JEP detail 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 JEP detail 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 JEP detail 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 JEP detail 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 JEP detail The Modular JDK Use the Java Platform Module System, specified by JSR 376 and implemented by JEP 261, to modularize the JDK.
201 JEP detail 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 JEP detail 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 JEP detail 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 JEP detail 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 JEP detail Tiered Attribution for javac Implement a new method type-checking strategy in javac to speed up attribution of poly expression in argument position.
216 JEP detail 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 JEP detail Annotations Pipeline 2.0 Redesign the javac annotations pipeline to better address the requirements of annotations and tools that process annotations.
219 JEP detail 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 JEP detail 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 JEP detail 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 JEP detail 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 JEP detail HTML5 Javadoc Enhance the javadoc tool to generate HTML5 markup.
225 JEP detail 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 JEP detail 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 JEP detail Unicode 7.0 Upgrade existing platform APIs to support version 7.0 of the Unicode Standard.
228 JEP detail Add More Diagnostic Commands Define additional diagnostic commands, in order to improve the diagnosability of Hotspot and the JDK.
229 JEP detail Create PKCS12 Keystores by Default Transition the default keystore type from JKS to PKCS12.
232 JEP detail Improve Secure Application Performance Improve the performance of applications that are run with a security manager installed.
231 JEP detail 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 JEP detail Generate Run-Time Compiler Tests Automatically Develop a tool to test the run-time compilers by automatically generating test cases.
235 JEP detail Test Class-File Attributes Generated by javac Write tests to verify the correctness of class-file attributes generated by javac.
236 JEP detail Parser API for Nashorn Define a supported API for Nashorn's ECMAScript abstract syntax tree.
237 JEP detail Linux/AArch64 Port Port JDK 9 to Linux/AArch64.
238 JEP detail 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 JEP detail 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 JEP detail 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 JEP detail 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 JEP detail 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 JEP detail Compile for Older Platform Versions Enhance javac so that it can compile Java programs to run on selected older versions of the platform.
248 JEP detail Make G1 the Default Garbage Collector Make G1 the default garbage collector on 32- and 64-bit server configurations.
249 JEP detail 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 JEP detail Store Interned Strings in CDS Archives Store interned strings in class-data sharing (CDS) archives.
251 JEP detail Multi-Resolution Images Define a multi-resolution image API so that images with resolution variants can easily be manipulated and displayed.
252 JEP detail Use CLDR Locale Data by Default Use locale data from the Unicode Consortium's Common Locale Data Repository (CLDR) by default.
253 JEP detail 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 JEP detail Compact Strings Adopt a more space-efficient internal representation for strings.
255 JEP detail 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 JEP detail BeanInfo Annotations Replace @beaninfo Javadoc tags with proper annotations, and process those annotations at run time to generate BeanInfo classes dynamically.
257 JEP detail 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 JEP detail HarfBuzz Font-Layout Engine Replace the existing ICU OpenType font-layout engine with HarfBuzz.
259 JEP detail 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 JEP detail 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 JEP detail Module System Implement the Java Platform Module System, as specified by JSR 376, together with related JDK-specific changes and enhancements.
262 JEP detail TIFF Image I/O Extend the standard set of Image I/O plugins to support the TIFF image format.
263 JEP detail HiDPI Graphics on Windows and Linux Implement HiDPI graphics on Windows and Linux.
264 JEP detail 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 JEP detail Marlin Graphics Renderer Update Java 2D to use the Marlin Renderer as the default graphics rasterizer.
266 JEP detail More Concurrency Updates An interoperable publish-subscribe framework, enhancements to the CompletableFuture API, and various other improvements.
267 JEP detail Unicode 8.0 Upgrade existing platform APIs to support version 8.0 of the Unicode Standard.
268 JEP detail 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 JEP detail 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 JEP detail 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 JEP detail Unified GC Logging Reimplement GC logging using the unified JVM logging framework introduced in JEP 158.
272 JEP detail 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 JEP detail DRBG-Based SecureRandom Implementations Implement the three Deterministic Random Bit Generator (DRBG) mechanisms described in NIST 800-90Ar1.
274 JEP detail 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 JEP detail Modular Java Application Packaging Integrate features from Project Jigsaw into the Java Packager, including module awareness and custom run-time creation.
276 JEP detail 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 JEP detail Enhanced Deprecation Revamp the @Deprecated annotation, and provide tools to strengthen the API life cycle.
278 JEP detail Additional Tests for Humongous Objects in G1 Develop additional white-box tests for the Humongous Objects feature of the G1 Garbage Collector.
279 JEP detail Improve Test-Failure Troubleshooting Automatically collect diagnostic information which can be used for further troubleshooting in case of test failures and timeouts.
280 JEP detail 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 JEP detail HotSpot C++ Unit-Test Framework Enable and encourage the development of C++ unit tests for HotSpot.
282 JEP detail 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 JEP detail 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 JEP detail New HotSpot Build System Rewrite the HotSpot build system using the build-infra framework.
285 JEP detail Spin-Wait Hints Define an API to allow Java code to hint that a spin loop is being executed.
287 JEP detail SHA-3 Hash Algorithms Implement the SHA-3 cryptographic hash functions (BYTE-only) specified in NIST FIPS 202.
288 JEP detail 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 JEP detail Filter Incoming Serialization Data Allow incoming streams of object-serialization data to be filtered in order to improve both security and robustness.
292 JEP detail 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 JEP detail Linux/s390x Port Port JDK 9 to Linux/s390x.
295 JEP detail Ahead-of-Time Compilation Compile Java classes to native code prior to launching the virtual machine.
297 JEP detail Unified arm32/arm64 Port Integrate the unified port of HotSpot for arm32 and arm64, contributed by Oracle, into the JDK.
299 JEP detail Reorganize Documentation Update the organization of the documents in the JDK, in both the source repositories and the generated docs.

Preview only

JEP Name Category Summary
110 JEP detail 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: