Java 6 through Java 25
Java versions
Each release has its own page. A shorter page means that release changed less of the language. Preview, incubator, and experimental features keep the status they had in that release.
- Java 6JSR 27011 December 2006. Java SE 6 is the reference platform defined by JSR 270. The JCP recorded its final release on 11 December 2006. This release has almost no new language syntax. The changes developers met were libraries, tooling, and runtime work.
- Java 7JSR 336July 2011. Java SE 7 is JSR 336. Oracle’s specification index dates the release to July 2011. The language changes are the small Project Coin set. The larger library and JVM changes are NIO.2, Fork/Join, and invokedynamic.
- Java 8Long-term supportMarch 2014. Java SE 8 is JSR 337, released in March 2014. Oracle and other vendors have treated it as a long-term support line. This is the functional release: lambdas, the stream library, Optional, and java.time. The chapters on lambdas and streams teach those topics in depth. This page only says what arrived.
- Java 9JSR 37921 September 2017. JDK 9 is the reference implementation of Java SE 9, JSR 379. General availability was 21 September 2017. The module system is the large change. jshell, collection factories, and process-API updates are the everyday ones. The HTTP client in this release is an incubator API, not the standard client.
- Java 10JSR 38320 March 2018. JDK 10 is Java SE 10, JSR 383, generally available on 20 March 2018. One language change dominates the release: local-variable type inference. The rest is runtime and platform bookkeeping, including the time-based version numbers used from here on.
- Java 11Long-term support25 September 2018. JDK 11 is Java SE 11, JSR 384, generally available on 25 September 2018. Vendors treat it as a long-term support release. The HTTP client leaves the incubator. Single-file source programs can be launched with the java command. Java EE and CORBA modules are removed from the JDK.
- Java 12JSR 38619 March 2019. JDK 12 is Java SE 12, JSR 386, generally available on 19 March 2019. There is no new permanent language feature. Switch expressions are a preview. Shenandoah is an experimental collector. G1 gains two latency-oriented changes.
- Java 13JSR 38817 September 2019. JDK 13 is Java SE 13, JSR 388, generally available on 17 September 2019. Two language features are in preview: text blocks, for the first time, and switch expressions, again. Neither is a permanent part of the language yet.
- Java 14JSR 38917 March 2020. JDK 14 is Java SE 14, JSR 389, generally available on 17 March 2020. Switch expressions become a permanent language feature. Records, pattern matching for instanceof, and text blocks are still previews. Helpful NullPointerExceptions are on by default.
- Java 15JSR 39015 September 2020. JDK 15 is Java SE 15, JSR 390, generally available on 15 September 2020. Text blocks become permanent. Sealed classes are a preview, and records and instanceof patterns are in a second preview. ZGC and Shenandoah leave experimental status.
- Java 16JSR 39116 March 2021. JDK 16 is Java SE 16, JSR 391, generally available on 16 March 2021. Records and pattern matching for instanceof become permanent. Sealed classes are still a preview. jpackage leaves the incubator. Stream.toList() arrives in this release.
- Java 17Long-term support14 September 2021. JDK 17 is Java SE 17, JSR 392, generally available on 14 September 2021. Vendors treat it as a long-term support release. Sealed classes become permanent. Pattern matching for switch is only a preview. The JDK strongly encapsulates its internals.
- Java 18JSR 39322 March 2022. JDK 18 is Java SE 18, JSR 393, generally available on 22 March 2022. The charset default becomes UTF-8. The JDK includes a simple web server. Pattern matching for switch is a second preview. Finalization is deprecated for removal.
- Java 19JSR 39420 September 2022. JDK 19 is Java SE 19, JSR 394, generally available on 20 September 2022. Virtual threads, record patterns, and the foreign function and memory API are previews. Structured concurrency is an incubator API, not a preview and not a final API.
- Java 20JSR 39521 March 2023. JDK 20 is Java SE 20, JSR 395, generally available on 21 March 2023. Scoped values appear for the first time, as an incubator API. Virtual threads, record patterns, switch patterns, and the foreign function and memory API are further previews. Structured concurrency is a second incubator.
- Java 21Long-term support19 September 2023. JDK 21 is Java SE 21, JSR 396, generally available on 19 September 2023. Vendors treat it as a long-term support release. Virtual threads, pattern matching for switch, record patterns, and sequenced collections are final. String templates, scoped values, structured concurrency, unnamed patterns, and unnamed classes are previews. The existing Java 21 example and the concurrency chapter stay the detailed sources.
- Java 22JSR 39719 March 2024. JDK 22 is Java SE 22, JSR 397, generally available on 19 March 2024. Unnamed variables and the foreign function and memory API become permanent. Stream gatherers, the class-file API, statements before super(...), and string templates are previews. Structured concurrency and scoped values are still previews.
- Java 23JSR 39817 September 2024. JDK 23 is Java SE 23, JSR 398, generally available on 17 September 2024. Markdown documentation comments become standard. Primitive patterns, module import declarations, and flexible constructor bodies are previews. ZGC uses the generational mode by default. Stream gatherers and the class-file API are still previews.
- Java 24JSR 39918 March 2025. JDK 24 is Java SE 24, JSR 399, generally available on 18 March 2025. Stream gatherers and the class-file API become permanent. The Security Manager is permanently disabled. Scoped values, structured concurrency, primitive patterns, module imports, and flexible constructor bodies are still previews. Generational Shenandoah and compact object headers are experimental.
- Java 25Long-term support16 September 2025. JDK 25 is the reference implementation of Java SE 25, JSR 400. It reached general availability on 16 September 2025. Most vendors treat it as a long-term support release. The 18 JEPs below are the JDK 25 feature set from the OpenJDK project page. Titles and status come from those JEP pages. Java 21 stays in this curriculum.
Java 5 remains in the version chapter and in versions1Java5Features.java.