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, to keep the list brief.

Below you can find tables for:

UPDATE: Dávid Csákvári also wrote a similar article for new features between Java 8 and Java 15, a more detailed one, with a lot of useful examples.

New Java language features since Java 8

FeatureSincePreview/incubation since
Record type14
Pattern Matching for instanceof
( if (x instanceOf String) { x is String here }
14
Text blocks13
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 Tool14
Helpful NullPointerExceptions14
Shenandoah GC12
Epsilon (no-op) GC11
Z GC11
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 Generator10
jhat Heap Visualizer9
Launch-Time JRE Version Selection9
Rarely-Used GC Combinations 89
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.

Leave a Reply

Your email address will not be published. Required fields are marked *