X

Insights and updates on Java SE and OpenJDK from the Java Platform Group Product Management Team

  • March 19, 2019

The arrival of Java 12!

Sharat Chander
Director, Java SE Product Management

Follow OpenJDK on Twitter

After the release of Java 9 in 2017, the Java platform release cadence has shifted away from a major release every 3+ years to a feature release every six-months. It provides developers more predictable access to continued enhancements. Feature releases now reliably occur in March and September of every year. No more trying to manage hundreds of changes every couple of years all at once – instead, change is delivered on a more granular, faster, and manageable pace.

Java 12 is now available!

Oracle now offers Java 12 for enterprises and developers.  JDK 12 will receive a minimum of two updates, per the Oracle CPU schedule, before being followed by Oracle JDK 13, which is due out in September 2019.

Oracle provides Java 12 as the Oracle OpenJDK release using the open source GNU General Public License v2, with the Classpath Exception (GPLv2+CPE), and also under a commercial license for those using the Oracle JDK release as part of an Oracle product or service, or who do not wish to use open source software. 

Java 12, Together

Similar to Java 11, it’s worth celebrating the contributions made to Java 12 from many individuals and organizations in the OpenJDK Community — we all build Java, together!

JDK 12 Fix Ratio

The overall rate of change in the JDK over time has remained essentially constant for many years, but under the six-month cadence the pace at which innovations are delivered to developers has vastly improved. Instead of making tens of thousands of fixes and around one hundred JEPs available in a large major release every few years, enhancements are made available in smaller feature releases on a more manageable, predictable six-month schedule. These changes can range from a significant feature to small enhancements to routine maintenance, bug fixes, and documentation improvements. Each such change is represented in a single commit for a single issue in the JDK Bug System.

Of the 1,919 JIRA issues marked as fixed in JDK 12, 1,433 were completed by people working for Oracle while 486 were contributed by individual developers and developers working for other organizations. Going through the issues and collating the organization data from assignees results in the following chart of organizations sponsoring the development of fixes in JDK 12:

Issues Fixed in JDK 12

While developers employed by Oracle resolved 75% of the JIRA issues during the development of JDK 12, 25% were fixed by developers working for other organizations. Developers working for the five next largest contributing organizations, Red Hat (8%), Google (6%), SAP (4%), BellSoft (1%) and IBM (1%), collectively fixed 20% of those issues. Independent developers contributed 3% of the fixes in JDK 12.

Last but not least, the remaining two percent of the fixes was collectively contributed by developers from a wide range of organizations including Alibaba, Amazon, ARM, Azul, Huawei, Intel, JetBrains, Linaro and Twitter.

Special thanks also to the many experienced developers who reviewed proposed changes, the early adopters who tried out early access builds and reported issues, and the dedicated professionals who provided feedback on the OpenJDK mailing lists.

New Enhancements in Java 12

Eight enhancements are delivered with Java 12:

JEP 325 – Switch Expressions (preview): Extends the switch statement so that it can be used as either a statement or an expression, and that both forms can use either a "traditional" or "simplified" scoping and control flow behavior. These changes will simplify everyday coding, and also prepare the way for the use of pattern matching (JEP 305) in switch. For JDK 12 this feature is available as a preview language feature (JEP 12).

JEP 344 – Abortable Mixed Collections for G1: Makes G1 mixed collections abortable if they might exceed the pause target.

JEP 346 – Promptly Return Unused Committed Memory from G1: Enhances the G1 garbage collector to automatically return Java heap memory to the operating system when idle.

JEP 189 – Shenandoah, A Low-Pause-Time Garbage Collector (experimental): Adds a new garbage collection (GC) algorithm which reduces GC pause times by doing evacuation work concurrently with the running Java threads.

JEP 230 – Microbenchmark Suite: Adds a basic suite of microbenchmarks to the JDK source code, and makes it easy for developers to run existing microbenchmarks and create new ones.

JEP 334 – JVM Constants API: Introduces an API to model nominal descriptions of key class-file and run-time artifacts, in particular constants that are loadable from the constant pool.

JEP 340 – One AArch64 Port, Not Two: Removes all of the sources related to the arm64 port while retaining the 32-bit ARM port and the 64-bit aarch64 port.

JEP 341 – Default CDS Archives: Enhance the JDK build process to generate a class data-sharing (CDS) archive, using the default class list, on 64-bit platforms.

With 12 million developers worldwide, Java continues to be the #1 programming language of choice by software programmers.  And as the on-time delivery of improvements with Java 12 demonstrates, through continued thoughtful planning and ecosystem involvement, the Java platform is well-positioned for modern development and growth in the cloud.