Oracle is proud to announce the general availability of JDK 20. This release is the 11th Feature Release delivered on time through the six-month release cadence. This level of predictability allows developers to easily manage their adoption of innovation thanks to a steady stream of expected improvements.
Java’s ability to boost performance, stability, and security continues to make it the world’s most popular programming language.
JDK 20 is now available!
Oracle now offers JDK 20 for developers, end-users, and enterprises.
Oracle JDK 20 is not a long-term support (LTS) release, therefore it will receive updates only until it is superseded in six months by JDK 21.
Oracle JDK 17 (released on September 14, 2021) is the most recent LTS release of Java. Oracle announced plans to shorten the time between LTS releases, from three years to two yearsLTS.
Java 20, Together
As we did with previous releases, with Java 20 we celebrate the contributions of many individuals and organizations in the OpenJDK Community — we all build Java, together!
JDK 20 Fix Ratio
The rate of change over time in the JDK releases has remained largely constant for years, but under the six-month cadence the pace at which production-ready features and improvements are delivered has sharply increased.
Instead of making tens of thousands of fixes and delivering close to one hundred JEPs (JDK Enhancement Proposals) every few years, as we did with yesteryear Major Releases, enhancements are delivered in leaner Feature Releases on a more manageable, predictable, six-month schedule. The changes range from significant new features to small enhancements to routine maintenance, bug fixes, and documentation improvements. Each change is represented in a single commit for a single issue in the JDK Bug System.
Of the 21,604 JIRA issues marked as fixed in Java 11 through Java 20 at the time of their GA, 15,420 were completed by people working for Oracle while 6,184 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 contributions in Java:
In Java 20, of the 2,314 JIRA issues marked as fixed, 1,595 were completed by Oracle, while 719 were contributed by other members of the Java community.
Oracle would like to thank the developers working for organizations including Alibaba, Amazon, ARM, Google, Huawei, IBM, Intel, ISCAS, Red Hat, SAP, and Tencent for their notable contributions. We are also thankful to see contributions from smaller organizations such as Bellsoft, and Loongson, as well as independent developers who collectively contributed 7% of the fixes in Java 20.
We are equally grateful 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.
The following individuals provided invaluable feedback on build quality, logged good quality bugs, or offered frequent updates:
Additionally, through the OpenJDK Quality Outreach program we would like to thank the following FOSS projects and individuals who provided excellent feedback on testing Java 20 early access builds to help improve the quality of the release:
As a special mention, we'd like to thank Rick Hillegas and the Apache Derby team for their reliable and regular feedback during each JDK release's Early Access test cycle for several years now.
New in Java 20
Along with thousands of performance, stability and security updates, Java 20 delivers dozens of new features and enhancements, seven of those enhancements are significant enough to warrant their own JDK Enhancement Proposals - JEPs, covering four preview features and three incubator features.
Some of the most important changes not requiring a JEP, are:
Full details of these and many other new features can be found at https://jdk.java.net/20/release-notes.
JEP Preview Features are fully specified and fully implemented Language or VM Features of the Java SE Platform; and yet impermanent. They are made available in JDK Feature Releases to allow for developer feedback based on real-world uses, before them becoming permanent in a future release. This also affords tool vendors the opportunity to work towards supporting features before they are finalized into the Java SE Standard.
JEP Incubator modules allow putting non-final APIs and non-final tools in the hands of developers and users to gather feedback that will ultimately improve the quality of the Java platform.
The seven JEPs delivered with Java 20 are grouped into three categories mapping to key long-term Java technology projects and hardware support.
JEP 432 – Record Patterns (2nd Preview)
Improves developer productivity by extending pattern matching to express more sophisticated, composable data queries. This is done by enhancing the Java programming language with record patterns to deconstruct record values. Record patterns and type patterns can be nested to enable a powerful, declarative, and composable form of data navigation and processing.
JEP 432 relates to:
JEP 433 – Pattern Matching for switch (4th Preview)
Improves developer productivity by enhancing the Java programming language with pattern matching for
switch expressions and statements. This improvement allows an expression to be tested against a number of patterns, each with a specific action, so that complex data-oriented queries can be expressed concisely and safely.
JEP 433 relates to:
JEP 434 - Foreign Function & Memory API (2nd Preview)
The Foreign Function & Memory API offers value in four unique ways:
Ease of use — Replaces the Java Native Interface (JNI) with a superior, pure-Java development model.
Performance — Provides performance that is comparable to, if not better than, existing APIs such as JNI and
Generality — Provides ways to operate on different kinds of foreign memory (e.g., native memory, persistent memory, and managed heap memory) and, over time, to accommodate other platforms (e.g., 32-bit x86) and foreign functions written in languages other than C (e.g., C++, Fortran).
Safety — Allows programs to perform unsafe operations on foreign memory but warn users about such operations by default.
The Foreign Function & Memory API introduces an API by which Java programs can interoperate with code and data outside of the Java runtime. By efficiently invoking foreign functions (i.e., code outside the JVM), and by safely accessing foreign memory (i.e., memory not managed by the JVM), the API enables Java programs to call native libraries and process native data without the brittleness and danger of JNI.
JEP 434 relates to:
Improves performance achieving performance superior to equivalent scalar computations. This is done by Introducing an API to express vector computations that reliably compile at runtime to optimal vector instructions on supported CPU architectures, thus achieving performance superior to equivalent scalar computations. Vector APIs were incubated in JDK 16 through 19. JDK 20 incorporates feedback from users of those releases as well as performance improvements and implementation enhancements.
JEP 426 relates to:
Project Loom aims to drastically reduce the effort of writing, maintaining, and observing high-throughput concurrent applications that make the best use of available hardware. Work on Project Loom started in late 2017 and has resulted in six JEPs since JDK 19.
JEP 429 – Scoped Values (Incubator)
Scoped Values enable the sharing of immutable data within and across threads. They are preferred to thread-local variables, especially when using large numbers of virtual threads and offers value in a number of ways including:
JEP 437 relates to:
Java continues to be the #1 programming language for today’s technology trends. As the on-time delivery of improvements with Java 20 demonstrates, through continued thoughtful planning and ecosystem involvement, the Java platform is well-positioned for modern development and growth in the cloud.
Continue staying current with news and updates by:
Sharat Chander has worked in the IT industry for 20 years, for firms such as Bell Atlantic, Verizon, Sun Microsystems, and Oracle. His background and technical specialty is in Java development tools, graphics design, and product/community management. Chander has been actively involved in the Java Community for 15 years, helping drive greater Java awareness, acceptance, adoption, and advocacy. At Oracle, as the director of Java developer relations, Chander serves as the JavaOne conference content chairperson, a role he's filled for 7 years, where he drives the technical content strategy and Java community involvement in the conference. He is a frequent keynote speaker and participant in developer programs worldwide. Chander holds a BS in corporate finance from the University of Maryland and an MBA in international business from Loyola College, Maryland. You can find Chander at multiple global developer events and Java community engagements. When not growing visibility for Java, he follows his other passion for baseball and fanatically following his hometown Baltimore Orioles.
Twitter handle: @Sharat_Chander