With the release of Java 9 in 2017, the Java release schedule shifted, from a major release every 3+ years to a feature release every six-months. One of the main reasons for this change was to offer developers more predictable access to continued enhancements. Feature releases now reliably occur in March and September of every year, which means developer no longer have to manage hundreds of changes every few years all at once. By gaining access to new enhancements at a more granular and faster measure, developers can much more easily manage the pace of innovation as proven by Java 10 offering 12 new enhancements, Java 11 offering 17 new enhancements, and Java 12 offering 8 new enhancements.
The Arrival of Java 13!
Oracle offers Java 13 for enterprises and developers. JDK 13 will receive a minimum of two updates, per the Oracle CPU schedule, before being followed by Oracle JDK 14, which is due out in March 2020, with early access builds already available.
Once again, Oracle will provide Java 13 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 13, Together
JDK 13 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 2,126 JIRA issues marked as fixed in JDK 13, 1,454 were completed by people working for Oracle while 671 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 13:
While developers employed by Oracle resolved ~70% of the JIRA issues during the development of JDK 13, ~30% were fixed by developers working for other organizations. Oracle would like to thank the developers working for organizations, like Google, Red Hat and SAP for their notable contributions. We are also thankful to see contributions from small organizations such as Bellsoft and from Independent developers who contributed 5% of the fixes in JDK 13!
Of note for this release are contributions from organizations interested in ARM support. Ampere Computing, ARM, Huawei, Linaro all had contributions in this regard. In this release was also contributions from Loongson, working on MIPS-based CPUs.
Also, Oracle continues to be thankful for 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. We also greatly appreciate those contributing quality content covering new features, such as Nicolai Parlog’s “Definitive Guide To Switch Expressions In Java 13”.
New Enhancements in Java 13
Five enhancements are delivered with Java 13, inclusive of two preview features:
JEP 350 – Dynamic CDS Archives: Extends application class-data sharing to allow the dynamic archiving of classes at the end of Java application execution. The archived classes will include all loaded application classes and library classes that are not present in the default, base-layer CDS archive.
JEP 351 – ZGC: Uncommit Unused Memory: Enhances the z garbage collector to return unused heap memory to the operating system.
JEP 353 – Reimplement the Legacy Socket API: Replaces the underlying implementation used by the java.net.Socket and java.net.ServerSocket APIs with a simpler and more modern implementation that is easy to maintain and debug. The new implementation will be easy to adapt to work with user-mode threads, a.k.a. fibers, currently being explored in Project Loom.
JEP 354 – Switch Expressions (Preview): Extends switch so it can be used as either a statement or an expression, which will simplify everyday coding, and prepare the way for the use of pattern matching (JEP 305) in switch.
JEP 355 – Text Blocks (Preview): Adds text blocks to the Java language, which will simplify the task of writing Java programs by making it easy to express strings that span several lines of source code, while avoiding escape sequences in common cases; enhance the readability of strings in Java programs that denote code written in non-Java languages; as well as support migration from string literals by stipulating that any new construct can express the same set of strings as a string literal, and interpret the same escape sequences, and be manipulated like a string literal.
Java continues to be the #1 programming language of choice by software programmers. And as the on-time delivery of improvements with Java 13 demonstrates, through continued thoughtful planning and ecosystem involvement, the Java platform is well-positioned for modern development and growth in the cloud.