Core Java

New features between Java 8 and Java 14

Since version 9, Java has new features every 6 months and it’s very hard to keep track of these new changes. Most of the information on the internet describes changes between the last 2 Java versions. However, if you’re in a similar situation as me, you’re not using the last Java version but a version several releases older.

Then it’s useful to know which new features were added since the version you use now, or between the versions that you use now and the one you want to start using next. Therefore I’ve compiled a table with all new features added since Java 8 for each new Java version. The first table contains changes in the Java language, the second language contains additions outside of the language, such as command line tools or JVM improvements.

Note that I didn’t include all the new features and API additions, only those that are most useful. There are some new less frequently used features that I didn’t include to keep the list brief.

Below you can find tables for:

New Java language features since Java 8

FeatureSincePreview/incubation since
Record type 14
Pattern Matching for instanceof
( if (x instanceOf String) { x is String here }
 14
Text blocks 13
Switch expressions (also JEP 354 in JDK 13)1412
New variants of exceptionally in CompletionStage class (async, componse)12 
String API improvements (indent, transform)12 
CompactNumberFormat class12 
String API improvements (repeat, isBlank, strip, lines)11 
Local-Variable Syntax for Lambda Parameters11 
New HTTP client API119
Local-Variable Type Inference10 
Flow API (reactive streams)9 
Java Platform Module System (modules)9 
Collection factory methods9 
Stream API improvements (takeWhile, dropWhile, ofNullable, iterate with condition)9 
Multi-Resolution Image API9 
Stack-Walking API9 
this.getClass().getPackageName()9 
Process API updates (detailed info about processes, e.g. ID, onExit, destroy)9 
CompletableFuture API enhancements (delay, timeout)9 
Interface private methods9 
since and forRemoval in Deprecated annotation9 
Interface Default and Static Methods8 
Method References8 
Optional class8 
Lambda expressions8 
Functional interfaces8 
Stream API8 
Effectively Final Variables8 
Repeating Annotations8 
New Date Time API 8 

New JDK tools and features since OpenJDK 8

Tool / featureSinceExperimental since
Packaging Tool 14
Helpful NullPointerExceptions14 
Shenandoah GC 12
Epsilon (no-op) GC 11
Z GC 11
Experimental Java-Based JIT Compiler (Graal VM) 10
Docker Container Support (-XX:-UseContainerSupport)10 and
8u191
 
Flexible heap size selection (-XX:MaxRAMPercentage)10 and
8u191
 
Application Class-Data Sharing10 
jlink9 
JShell (Java REPL)9 
Multi-Release JAR Files9 
Compact Strings9 

Deprecated/removed features and APIs:

Feature / APIDeprecated sinceRemoved since
Solaris and SPARC Ports14 
ParallelScavenge + SerialOld GC Combination14 
CMS GC914
Pack200 Tools and API1114
Nashorn JavaScript Engine11 
Java FX (moved to OpenJFX) 11
Java EE and CORBA modules911
javah Native-Header Generator 10
jhat Heap Visualizer 9
Launch-Time JRE Version Selection 9
Rarely-Used GC Combinations89
Applet API9 

For more details, the javaalmanac.io/ catalog is very useful to browse the changes in Java thoughout all its history. It can give you complete diff of APIs between selected Java versions, e.g. between Java 8 and Java 11. Very useful If you’re thinking about migrating to a specific Java version.

Published on Java Code Geeks with permission by Ondrej Mihalyi, partner at our JCG program. See the original article here: New features between Java 8 and Java 14

Opinions expressed by Java Code Geeks contributors are their own.

Ondrej Mihalyi

Ondrej is a lecturer and consultant inventing and evangelizing new approaches with already proven Java tooling. As a Scrum Master and expert in Java EE ecosystem, he helps companies to build and educate their developer teams, improve their development processes and be flexible and successful in meeting client requirements.
Subscribe
Notify of
guest

This site uses Akismet to reduce spam. Learn how your comment data is processed.

3 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
Elena gillbert
4 years ago

Hi…
I’m Elena gillbert.Java 11 is a currently supported long-term support (LTS) version (“Oracle Customers will receive Oracle Premier Support”); Oracle released for the “legacy” Java 8 LTS the last free “public update” in January 2019 for commercial use, while it will otherwise still support Java 8 with public updates for personal use up to …

Alex Byrth
Alex Byrth
4 years ago

Just can’t keep up with those micro upgrades. I’ve just stuck with Java 8, where clients can get thought java.com website and “Auf Wiedersehen”!

Varun Rana
4 years ago

Java 11 is a currently supported long-term support (LTS) version

Back to top button