Java is a rapidly evolving platform. With new OpenJDK versions every six months, and a flurry of JDK enhancement proposals with each release, it’s hard to keep up with all the new features in Java. And, while many of those features aren’t going to set the Java world on fire, it’s important to keep tabs on those changes.

In this guide, we look at Java as a language, how it progresses via the JDK enhancement process, the JEPs that drive those changes, and provide detailed resources on some of the bigger changes in recent years.

A Brief History of Java

Java is a general-purpose, cross-platform language developed by James Gosling at Sun Microsystems in the mid-90s.

It solved a number of problems at the time, including portability write once, run anywhere (WORA), simplified memory management, and abstraction from the operating system. Java became wildly popular across enterprises, ISVs, and open source communities. Sun was acquired by Oracle in January of 2010 which led to what would become known as the Oracle JDK.

Java is considered among the top three most popular languages alongside Javascript and Python, and can be found everywhere from phones, tablets, and web applications, to IoT devices, ATMs, and gaming devices.

Java Enters Open Source

In 2006, Sun announced a shift in focus from maintaining a Java proprietary platform, to making the platform both free, and open-source under a GNU general public license. Later in 2006, they released Java HotSpot VM and compiler as a free software to the OpenJDK community.

What is OpenJDK?

"OpenJDK is the free, open-source distribution of Java SE."

But, as Brian Goetz famously said, "OpenJDK is a place, not a thing."  In 2007, the community released their first open-source implementation of the Java SE, which is commonly referred to as OpenJDK. Though the first release still used proprietary code, each subsequent OpenJDK release reduced the amount of proprietary Java code until they released the first completely open source OpenJDK in 2010.

OpenJDK Release Timeline

The JDK Enhancement Process (JEP)

The JDK enhancement process, as outlined in JEP 1: JDK Enhancement-Proposal & Roadmap Process, is the process in which new features and “non-trivial” changes are integrated into new JDKs. Those changes must meet one of the following criteria:

  1. More than two weeks of engineering work
  2. Makes a significant change to the JDK
  3. Is in high demand by developers/customers

While those criteria leave plenty of wiggle room, most of the proposed enhancements to the JDK aren’t met with backlash by most users.

JDK Incubator Modules

According to JEP 11, “Incubator modules are a means of putting non-final APIs and non-final tools in the hands of developers, while the APIs/tools progress towards either finalization or removal in a future release.”

JDK Preview Language and VM Features

JEP 12 describes preview language and VM features as, “a new feature of the Java SE Platform that is fully specified, fully implemented, and yet impermanent. It is available in a JDK feature release to provoke developer feedback based on real world use” which may lead to adoption into the language.

OpenJDK Projects

Many of the JEPs we see are the result of work via OpenJDK Projects, and represent a piece of a larger effort to steer the language and platform. They’re collaborative, and “must be sponsored by one or more Groups.”

Of the many OpenJDK projects going on right now, there are three particularly important ones:

  • Project Valhalla — Value types
  • Project Loom — Lightweight threads / fibers / continuation
  • Project Panama — Foreign Function Interface

Other small improvements to the language, (e.g., switch expressions, text blocks, records) come via Project Amber.

JEP 322 and the Six Month Release Cadence

With the introduction of time-based release versioning under JEP 322, the JDK entered a new release cycle. The cycle, which follows a “strict, six month cadence,” means fewer features per release, but more frequent feature and version releases.

JEP 322 and the Six Month Release Cadence

Of course, many Java-dependent technology companies (like IDEs, application frameworks, and etc.) schedule their releases to immediately support open JDK releases. If these companies don’t immediately support the latest OpenJDK version, they risk losing out on market share as more teams migrate to newer versions.

Java JEPs: JDK Enhancement Proposals

JDK Enhancement Proposals, or Java JEPs, have become a critical part of the democratization of Java as a community initiative.

And, because JEPs form the roadmap for continued improvement and innovation of the Java language, they represent a central standard for which the future direction of Java is agreed upon and built.

While the amount of JEPs per JDK release have gone down, as noted in the section above, the six month release cadence means features, both preview and standard, are added to the JDK more frequently.

In the sections below, we look at JEPs introduced for JDK versions, starting with the upcoming JDK 15, and working our way backward to JDK 8.

JDK Enhancement Proposals for Java 15

So far for Java 15, the following JEPs are marked for addition. JEP 378, of course, marks the integration of Text Blocks as a fully-fledged feature for Java. You can view a full list of the JEPs for Java 15, here.

  • JEP 371: Hidden Classes
  • JEP 372: Remove the Nashorn JavaScript Engine
  • JEP 377: ZGC: A Scalable Low-Latency Garbage Collector
  • JEP 378: Text Blocks
  • JEP 379: Shenandoah: A Low-Pause-Time Garbage Collector

JDK Enhancement Proposals for Java 14

JDK 14, released on 2020/03/17, included a number of features and removals. Of note were the Records, Switch Expressions, Text Blocks, and Foreign Memory Access API features. Of those, Switch Expressions was added as a standard feature after several rounds of preview. You can view the full list of Java 14 JEPs, here.

JDK Enhancement Proposals for Java 13

JDK13, released to the public in September 2019, introduced a second preview round for switch expressions, and a first preview for text blocks – both of which came from Project Amber. You can view a full list of the Java 13 JEPs, here.

JDK Enhancement Proposals for Java 12

Of note for Java 12 was the controversial Shenandoah garbage collector, which wasn’t included in Oracle or OpenJDK versions of the JDK and only available on downstream distributions. Also of note was the switch expressions preview language feature, which made it’s debut in Java 12. You can view a full list of the JEPs for Java 12, here.

JDK Enhancement Proposals for Java 11

JDK 11 had a few notable changes to the JDK. The biggest being the removal of Java EE and CORBA modules, which were deprecated in Java SE 9 with intent to remove. Second to that was the introduction of the ZGC, an experimental garbage collector.

You can view the full list of JEPs for Java 11, here.

JDK Enhancement Proposals for Java 10

One of the biggest JEPs for Java 10 was the time-based release versioning, which introduced the new release cadence for OpenJDK. As noted earlier in the article, this was a big shift for OpenJDK and dependent technologies within the Java ecosystem.

You can view the full list of JEPs for Java 10, here.

JDK Enhancement Proposals for Java 9

Even though it followed a LTS version in Java 8, Java 9 featured a whopping 90 JDK enhancement proposals.

You can view the full list of JEPs for Java 9, here.

JDK Enhancement Proposals for Java 8

While Lambdas deservedly get the most attention from the Java 8 release, there were 50 JEPs included in JDK8, including the Java Stream API. You can view a full list of the JEPs for Java 8, here.

Additional Resources

Looking for additional reading on Java, OpenJDK, JDK Enhancement Proposals, projects and more?

Be sure to check out the links below for in-depth webinars, reports, and articles from our in-house Java experts. Or, if you want the latest JEPs straight from the source, be sure to visit the JEP Index page.

Recorded Webinars

Blogs

Other Resources

JRebel Supports the Latest Features in Java

JRebel and XRebel are tirelessly updated to support the latest features in Java. Whether that’s text blocks, switch expressions, or the next Lambda, JRebel and XRebel work with the latest JDK within days of release.

Skip redeploys, immediately check code changes, and assess their performance impact in seconds with JRebel and XRebel.

Want to see how they can work on your project? Request a trial today.

REQUEST TRIAL