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.
Table of Contents:
Java 17 is now available. Get an overview of Java 17 features, improvements, and deprecations.
READ THE BLOG
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 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.
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:
- More than two weeks of engineering work
- Makes a significant change to the JDK
- 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.
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.
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
For Java 15, released 2020/09/15, the following JEPs were added. 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 360: Sealed Classes
- JEP 371: Hidden Classes
- 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.
- JEP 359: Records (Preview)
- JEP 361: Switch Expressions (Standard)
- JEP 368: Text Blocks (Second Preview)
- JEP 370: Foreign-Memory Access API (Incubator)
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
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.
- Java Modernization: A Look at Java 17 and Beyond
- OpenJDK in 2020 and Beyond
- JDK Enhancement Proposals
- Java 13: Using Text Blocks and Switch Expressions
- Java 10: Java 10 and Beyond
- Java 17: New Features
- Java 14: JEP 359: Records Preview for Java 14
- Java 14: JEP 370: Foreign-Memory Access API for JDK 14
- Java 13: Using Text Blocks in Java 13
- Java 13: Using Switch Expressions
- Java 10: Language Changes
- Java 9: Language and API Improvements
- Java 8: Using Java Stream Map and Filter
- Java 8: CompletableFuture API
- Java 8: Language Features
- Java 8: Exploring Lambdas
- Java 8: Default Methods
- Java 8: Using Monads
- Java Streams: The Real Powerhouse in Java 8
- Java 7 vs Java 8 Performance Comparison
JRebel Supports the Latest Features in Java
JRebel is tirelessly updated to support the latest features in Java. Whether that’s text blocks, switch expressions, or the next Lambda, JRebel works with the latest JDK within days of release.
Skip redeploys, immediately check code changes, and assess their performance impact in seconds with JRebel.
Want to see how they can work on your project? Request a trial today.
Want a demo of our tools from one of our experts first? Schedule your demo below.
Curious how much savings you can experience? Calculate your ROI.