Skip to content

Java Version Guide

Published: at 12:00 PM

This is a living reference page — I keep it updated as versions and details change.

A “what’s new” for every Java feature release since Java 8. Since Java 9, a feature release ships every six months (March and September). LTS (Long-Term Support) releases — the ones most teams standardize on — now arrive every two years; earlier they were three years apart.

LTS line: 8 · 11 · 17 · 21 · 25 (next: 27 in 2027). Expand any release below for its highlights and a link to the release notes. For the complete picture of any version, see the JEP index.

Releases

Java 25Sep 2025LTS
  • Flexible constructor bodies — run statements before this()/super() (JEP 513)
  • Module import declarationsimport module M to pull in a module’s exported packages (JEP 511)
  • Compact source files & instance main methods — much smaller “hello world”, great for learning (JEP 512)
  • Scoped values standardized — a safer, immutable alternative to thread-locals (JEP 506)
  • Still in preview: primitive types in patterns, structured concurrency, stable values

Release notes →

Java 24Mar 2025
  • Stream Gatherers standardized — custom intermediate stream operations (JEP 485)
  • Class-File API standardized — parse/generate .class files without ASM (JEP 484)
  • Quantum-resistant cryptography: ML-KEM (JEP 496) and ML-DSA (JEP 497)
  • Ahead-of-time class loading & linking — faster startup, part of Project Leyden (JEP 483)
  • Compact object headers (experimental); the Security Manager is now permanently disabled

Release notes →

Java 23Sep 2024
  • Markdown in Javadoc — write doc comments in Markdown (JEP 467)
  • Generational ZGC becomes the default mode (JEP 474)
  • Primitive types in patterns, instanceof, and switch (preview)

Release notes →

Java 22Mar 2024
  • Foreign Function & Memory API standardized — call native code and manage off-heap memory, no JNI (JEP 454)
  • Unnamed variables & patterns (_) standardized (JEP 456)
  • Multi-file source-code programs via java launcher; statements before super() (preview)

Release notes →

Java 21Sep 2023LTS
  • Virtual threads standardized — cheap, massively scalable concurrency (JEP 444)
  • Record patterns standardized — destructure records in switch/instanceof (JEP 440)
  • Pattern matching for switch standardized (JEP 441)
  • Sequenced collections — uniform first/last access (JEP 431)
  • Generational ZGC; string templates & unnamed patterns (preview)

Release notes →

Java 20Mar 2023
  • Second previews of virtual threads, record patterns, and pattern matching for switch
  • Scoped values (incubator)

Release notes →

Java 19Sep 2022
  • Virtual threads (preview) and structured concurrency (incubator) debut
  • Record patterns (preview); pattern matching for switch (preview); FFM API (preview)

Release notes →

Java 18Mar 2022
  • UTF-8 as the default charset everywhere (JEP 400)
  • Simple web server (jwebserver) for quick static hosting; code snippets in Javadoc

Release notes →

Java 17Sep 2021LTS
  • Sealed classes standardized — restrict which types can extend/implement (JEP 409)
  • New macOS rendering pipeline (Metal); strong encapsulation of JDK internals
  • The long-time baseline for Spring Boot 3.x and much of the modern ecosystem

Release notes →

Java 16Mar 2021
  • Records standardized (JEP 395); pattern matching for instanceof standardized (JEP 394)
  • Stream.toList(), Unix-domain socket channels, Vector API (incubator)

Release notes →

Java 15Sep 2020
  • Text blocks standardized — multi-line string literals (JEP 378)
  • Sealed classes (preview); ZGC and Shenandoah become production-ready

Release notes →

Java 14Mar 2020
  • Records and pattern matching for instanceof debut (preview)
  • Switch expressions standardized (JEP 361); helpful NullPointerException messages

Release notes →

Java 13Sep 2019
  • Text blocks (preview); switch expressions (second preview)
  • Dynamic CDS archives

Release notes →

Java 12Mar 2019
  • Switch expressions (preview); Shenandoah GC (experimental)
  • Compact number formatting

Release notes →

Java 11Sep 2018LTS
  • Standardized HTTP Client (java.net.http) with HTTP/2 and WebSocket (JEP 321)
  • var allowed in lambda parameters; run a single source file directly (java Foo.java)
  • Flight Recorder open-sourced; new String methods (isBlank, strip, lines, repeat)

Release notes →

Java 10Mar 2018
  • var — local-variable type inference (JEP 286)
  • Application class-data sharing; parallel full GC for G1

Release notes →

Java 9Sep 2017
  • Module system (JPMS / Project Jigsaw) (JEP 261)
  • JShell (the REPL); collection factory methods (List.of, Map.of); private interface methods

Release notes →

Java 8Mar 2014LTS
  • Lambda expressions and the Stream API — the biggest language shift in Java’s history
  • The java.time (JSR-310) date/time API; default methods on interfaces; Optional
  • Still widely deployed; the last LTS before the modular era

What’s new in Java 8 →

Java 26 is the next feature release, targeted for March 2026 (non-LTS; the next LTS is Java 27 in September 2027). Check the OpenJDK JDK project page for its finalized JEPs.

How Java Support Works

Sources