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:A Brief History of JavaThe JDK Enhancement ProcessJDK Enhancement Proposals Additional Resources Java 19 is now available. Get an overview of Java 19 features and improvements.READ THE BLOGA Brief History of JavaJava 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 SourceIn 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 workMakes a significant change to the JDKIs in high demand by developers/customersWhile 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 ModulesAccording 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 FeaturesJEP 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 ProjectsMany 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 typesProject Loom — Lightweight threads / fibers / continuationProject Panama — Foreign Function InterfaceOther small improvements to the language, (e.g., switch expressions, text blocks, records) come via Project Amber.JEP 322 and the Six Month Release CadenceWith 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 ProposalsJDK 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 15For 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.JEP 360: Sealed ClassesJEP 371: Hidden ClassesJEP 372: Remove the Nashorn JavaScript EngineJEP 377: ZGC: A Scalable Low-Latency Garbage CollectorJEP 378: Text BlocksJEP 379: Shenandoah: A Low-Pause-Time Garbage CollectorJDK Enhancement Proposals for Java 14JDK 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.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 13JDK13, 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.JEP 354: Switch Expressions (Preview)JEP 355: Text Blocks (Preview)JDK Enhancement Proposals for Java 12Of 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 Java 12 JEPs.JEP 325: Switch ExpressionsJDK Enhancement Proposals for Java 11JDK 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.JDK Enhancement Proposals for Java 10One 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.JDK Enhancement Proposals for Java 9Even 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.JDK Enhancement Proposals for Java 8While 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.Java 8 DatasheetJava 8 Default MethodsJava 8 Language FeaturesExploring Java 8 LambdasJava Streams: The Real Powerhouse in Java 8Additional ResourcesLooking 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 WebinarsJava Modernization: A Look at Java 17 and BeyondOpenJDK in 2020 and BeyondJDK Enhancement ProposalsJava 13: Using Text Blocks and Switch ExpressionsJava 10: Java 10 and BeyondBlogsJava 17: New FeaturesJava 14: JEP 359: Records Preview for Java 14Java 14: JEP 370: Foreign-Memory Access API for JDK 14Java 13: Using Text Blocks in Java 13Java 13: Using Switch ExpressionsJava 10: Language ChangesJava 9: Language and API ImprovementsJava 8: Using Java Stream Map and FilterJava 8: CompletableFuture APIJava 8: Language FeaturesJava 8: Exploring LambdasJava 8: Default MethodsJava 8: Using MonadsJava Streams: The Real Powerhouse in Java 8Java 7 vs Java 8 Performance ComparisonOther ResourcesOpenJDK Adoption in 2020Open Source Tools in JavaUpdating Java: A Guide to Java ModernizationJRebel Supports the Latest Features in JavaJRebel 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.REQUEST TRIALWant a demo of our tools from one of our experts first? Schedule your demo below.See DemoCurious how much savings you can experience? Calculate your ROI.Find My ROI