whichjava

Java version history

What changed in every Java release, from JDK 1.0 in 1996 to Java 27, newest first. Each version lists its featured changes and then all of them. Every item links to the official source (the OpenJDK JEP, JCP specification or Oracle documentation) if you want to learn more.

28 releases · Bold = LTS (long-term support) · Reviewed October 24, 2026

Java 28

In developmentMarch 2027 (planned)

Not released yet. JDK 28 is scheduled for March 2027 and is the first release to preview Project Valhalla’s value objects. Its JEP list can still change; this is the state on October 24, 2026.

Featured

All changes in Java 28 (9)

Source: OpenJDK JDK 28 project ↗

Java 27

FeatureSeptember 2026

The latest release. Mostly runtime and security work: G1 everywhere, compact object headers on by default and post-quantum TLS.

Featured

All changes in Java 27 (9)

Source: OpenJDK JDK 27 project ↗

Java 26

FeatureMarch 2026

HTTP/3, ahead-of-time caching for any GC, and the first step toward making final fields truly final.

Featured

All changes in Java 26 (10)

Source: OpenJDK JDK 26 project ↗

Java 25

LTSSeptember 2025

The current LTS release. Finalizes many features previewed since Java 21: compact source files, flexible constructors, module imports and scoped values.

Featured

All changes in Java 25 (18)

Source: OpenJDK JDK 25 project ↗

Java 24

FeatureMarch 2025

A big release with 24 JEPs, including Stream Gatherers, the Class-File API, virtual threads without pinning and the first post-quantum algorithms.

Featured

All changes in Java 24 (24)

Source: OpenJDK JDK 24 project ↗

Java 23

FeatureSeptember 2024

Markdown in Javadoc, generational ZGC by default and more previews. String Templates, previewed in 21 and 22, were withdrawn.

Featured

All changes in Java 23 (13)

Source: OpenJDK JDK 23 project ↗

Java 22

FeatureMarch 2024

The Foreign Function & Memory API and unnamed variables become final; multi-file programs run without a build tool.

Featured

All changes in Java 22 (12)

Source: OpenJDK JDK 22 project ↗

Java 21

LTSSeptember 2023

A landmark LTS: virtual threads, record patterns, pattern matching for switch and sequenced collections are all final.

Featured

All changes in Java 21 (15)

Source: OpenJDK JDK 21 project ↗

Java 20

FeatureMarch 2023

A preview-only release that refined the features finalized in Java 21.

Featured

All changes in Java 20 (7)

Source: OpenJDK JDK 20 project ↗

Java 19

FeatureSeptember 2022

Virtual threads and structured concurrency appear for the first time, as preview and incubator features.

Featured

All changes in Java 19 (7)

Source: OpenJDK JDK 19 project ↗

Java 18

FeatureMarch 2022

UTF-8 becomes the default charset on every platform, and the JDK gains a small built-in web server.

Featured

All changes in Java 18 (9)

Source: OpenJDK JDK 18 project ↗

Java 17

LTSSeptember 2021

An LTS that finalizes sealed classes and strongly encapsulates JDK internals. Oracle introduced its free NFTC license with this release.

Featured

All changes in Java 17 (14)

Source: OpenJDK JDK 17 project ↗

Java 16

FeatureMarch 2021

Records and pattern matching for instanceof become final. OpenJDK moved to Git and GitHub.

Featured

All changes in Java 16 (18)

Source: OpenJDK JDK 16 project ↗

Java 15

FeatureSeptember 2020

Text blocks are final, ZGC and Shenandoah become production-ready, and Nashorn is removed.

Featured

All changes in Java 15 (14)

Source: OpenJDK JDK 15 project ↗

Java 14

FeatureMarch 2020

Switch expressions become final, NullPointerExceptions finally say what was null, and records appear in preview.

Featured

All changes in Java 14 (16)

Source: OpenJDK JDK 14 project ↗

Java 13

FeatureSeptember 2019

A small release: text blocks appear in preview and the legacy socket implementation is rewritten.

Featured

All changes in Java 13 (5)

Source: OpenJDK JDK 13 project ↗

Java 12

FeatureMarch 2019

Switch expressions appear in preview and the Shenandoah GC arrives as an experimental collector.

Featured

All changes in Java 12 (9)

Source: OpenJDK JDK 12 project ↗

Java 11

LTSSeptember 2018

The first LTS under the six-month cadence. Adds the standard HTTP Client and single-file programs, and removes Java EE and CORBA modules. Oracle JDK became a commercial product and OpenJDK builds became the free option.

Featured

All changes in Java 11 (19)

Source: OpenJDK JDK 11 project ↗

Java 10

FeatureMarch 2018

The first release on the six-month schedule. It brought var for local variables and time-based version numbers.

Featured

All changes in Java 10 (13)

Source: OpenJDK JDK 10 project ↗

Java 9

FeatureSeptember 2017

The module system (Project Jigsaw) reorganized the JDK itself. Java 9 also added JShell and collection factory methods, and made G1 the default GC.

Featured

All changes in Java 9 (91)

Source: OpenJDK JDK 9 project ↗

Java 8

LTSMarch 2014

The release that changed how Java is written: lambdas, streams and a new date-time API. Still widely used in legacy systems.

Featured

All changes in Java 8 (60)

Source: OpenJDK JDK 8 features ↗

Java SE 7

Major releaseJuly 2011 · “Dolphin”

The first release after Oracle acquired Sun, and the first built from OpenJDK. Small language improvements (Project Coin), NIO.2 and the fork/join framework.

Featured

All changes in Java SE 7 (24)

Source: OpenJDK JDK 7 features ↗

Java SE 6

Major releaseDecember 2006 · “Mustang”

Dropped the “J2SE” name. Focused on tooling, scripting, web services and desktop integration rather than language changes.

Featured

All changes in Java SE 6 (17)

Source: JSR 270: Java SE 6 ↗

J2SE 5.0

Major releaseSeptember 2004 · “Tiger”

The biggest language update before Java 8: generics, annotations, enums, autoboxing, varargs and the enhanced for loop. Also known as Java 1.5.

Featured

All changes in J2SE 5.0 (22)

Source: JSR 176: J2SE 5.0 ↗

J2SE 1.4

Major releaseFebruary 2002 · “Merlin”

The first release developed through the Java Community Process. It added assertions, regular expressions, NIO and logging.

Featured

All changes in J2SE 1.4 (17)

Source: JSR 59: J2SE 1.4 ↗

J2SE 1.3

Major releaseMay 2000 · “Kestrel”

Performance and integration: HotSpot became the default JVM and JNDI and Java Sound joined the platform.

Featured

All changes in J2SE 1.3 (9)

Source: Java version history ↗

J2SE 1.2

Major releaseDecember 1998 · “Playground”

Branded “Java 2”. It tripled the size of the platform with the Collections Framework, Swing and Java 2D.

Featured

All changes in J2SE 1.2 (13)

Source: Java version history ↗

JDK 1.1

Major releaseFebruary 1997

Filled in the platform: inner classes, JDBC, RMI, reflection, serialization and JavaBeans.

Featured

All changes in JDK 1.1 (12)

Source: Java version history ↗

JDK 1.0

Major releaseJanuary 1996 · “Oak”

The first public release from Sun Microsystems. “Write once, run anywhere”: compile to bytecode and run it on any JVM.

Featured

All changes in JDK 1.0 (8)

Source: Java version history ↗

About this page

WhichJava is a reference, not a course: we summarize each change in one line and link to the people who wrote it. For JDK 8 and later, “all changes” is the release’s complete JEP list plus notable library additions; earlier releases list their major features. Preview and incubator features can change before they become final. Spotted a mistake? See About & contact.

Choosing a version to install? See which Java version to use →