Java LTS Versions: Java 8, Java 11, Java 17, Java 21
These are official Long-Term Support (LTS) releases provided by Oracle and other vendors like OpenJDK, Amazon Corretto, Azul Zulu, and Eclipse Temurin.
-
Recommended for production environments due to their extended support lifecycle (typically 8+ years).
-
Oracle formalized the LTS model with Java 11, introducing a new LTS release every 3 years.
-
Java 8, though released before the formal LTS model was introduced, is widely regarded as an LTS version because of its long-term support and broad adoption.
- LTS (Long-Term Support) ensures continued updates including: Security patches, Bug fixes, Performance enhancements
Java Non-LTS Versions: Java 1.2, 5, 6, 7, 9, 10, 12, 13, 14, 15, 16, 18, 19, 20, etc.
These are feature releases with a shorter support window (~6 months), released between LTS versions.
-
Designed to introduce new features and improvements early.
-
Useful for developers to experiment before features stabilize in future LTS versions.
-
Java 6 and 7, despite having extended support in practice, were not officially classified as LTS.
🔹 Java 1.0 (Jan 1996)
First official release.
Introduced platform independence via the Java Virtual Machine (JVM).
Provided automatic memory management through built-in garbage collection.
Enabled object-oriented programming with classes and interfaces.
Supported multithreading with
Thread
andRunnable
.Included exception handling with
try
,catch
,finally
,throw
, andthrows
.Introduced AWT (Abstract Window Toolkit) for building basic GUI applications.
Introduced applets to run Java programs securely inside web browsers.
Provided networking support via
java.net
(sockets, URLs, etc.).Included input/output (I/O) via
java.io
with stream-based I/O.Included core utility classes in
java.util
(e.g.,Vector
,Hashtable
,Date
).Defined primitive data types:
byte
,short
,int
,long
,float
,double
,char
,boolean
.Provided core language classes in
java.lang
(e.g.,Object
,String
,Math
,System
).Introduced basic security model (sandbox) for running untrusted code safely.
Used compiled bytecode (
.class
files) executed by the JVM.Supported Unicode 1.1 character encoding for internationalization.
Allowed dynamic class loading at runtime.
🔹 Java 1.1 (Feb 1997)
Introduced Event Delegation Model to replace the old AWT event model.
-
Added Inner Classes, including static, member, local, and anonymous classes.
-
Introduced JavaBeans component model for reusable software components.
-
Added Reflection API (
java.lang.reflect
) for runtime inspection and manipulation of classes. -
Introduced RMI (Remote Method Invocation) for distributed object communication in pure Java.
-
Added Object Serialization (
java.io.Serializable
) to persist and restore object states. -
Introduced JDBC 1.0 for database connectivity via SQL.
-
Enhanced Internationalization support with
java.util.Locale
andResourceBundle
. -
Enabled Security enhancements, including digital signing and key management.
-
Added support for Unicode 2.0 for broader character encoding.
-
Introduced
javac
support for-target
flag for cross-compilation to earlier versions. -
Expanded AWT improvements for layout managers, printing, and clipboard support.
-
Added JAR file format support for packaging classes and resources together.
🔹 Java 1.2 (Dec 1998) – Java 2
👉 Non-LTS but popular and widely adopted, as LTS wasn’t officially defined back then.
Introduced the Collections Framework (
List
,Set
,Map
, etc.) underjava.util
.-
Added the Swing GUI toolkit (
javax.swing
) for richer, lightweight UI components. -
Launched the Java Plug-in to run applets within web browsers securely.
-
Introduced the Java 2 Security Model with fine-grained, policy-based permissions.
-
Introduced the Access Control API (
java.security
) withPermission
,Policy
, etc. -
Enhanced JIT (Just-In-Time) Compiler for better performance.
-
Introduced Java IDL for CORBA interoperability and distributed computing.
-
Improved Internationalization (i18n) and Localization features.
-
Added support for Drag and Drop (DnD) and Clipboard APIs.
-
Introduced Weak References and
java.lang.ref
package. -
Introduced Java Naming and Directory Interface (JNDI) for directory services.
-
Enhanced AWT with lightweight component architecture.
-
Introduced ScrollPane, ToolTip, and other advanced GUI components.
-
Deprecated old event model fully in favor of event delegation model.
-
Added support for serialization filtering (basic implementation for secure deserialization).
-
Introduced Policy-based security management for better control over code access.
-
Java 2 Platform split into J2SE, J2EE, and J2ME editions.
🔹 Java 1.3 (May 2000)
Introduced HotSpot JVM as the default virtual machine for better performance.
-
Added Java Sound API (
javax.sound
) for playback and recording of audio. -
Introduced Java Naming and Directory Interface (JNDI) to core API (
javax.naming
). -
Enhanced RMI (Remote Method Invocation) with RMI over IIOP (Inter-ORB Protocol).
-
Improved Swing performance and look & feel updates.
-
Introduced Mouse Wheel Support in AWT and Swing (
MouseWheelEvent
). -
Added Dynamic Proxy Classes via
java.lang.reflect.Proxy
for flexible interface implementations. -
Added Timer class in
javax.swing
for easier scheduling of UI tasks. -
Introduced
strictfp
keyword to enforce IEEE 754 standards in floating-point computations. -
Improved garbage collection algorithms and performance.
-
Enhanced Java Platform Debugger Architecture (JPDA) for better debugging tools.
-
Deprecated old thread methods like
stop()
,suspend()
, andresume()
for safety reasons. -
Integrated JAR indexing for faster class loading in large archives.
-
Updated tooling: improved
javac
,java
,javadoc
, and other SDK tools.
🔹 Java 1.4 (Feb 2002)
Introduced the assert keyword for runtime assertions (
assert condition;
).-
Added NIO (New I/O) package (
java.nio
) for high-performance I/O with buffers and channels. -
Introduced regular expression support via
java.util.regex
package. -
Integrated Logging API in
java.util.logging
for configurable application logging. -
Added exception chaining with constructors that take a cause (
Throwable
). -
Introduced image I/O APIs (
javax.imageio
) for reading/writing images. -
Enhanced XML support via JAXP 1.1 (DOM, SAX, and XSLT).
-
Integrated IPv6 support into core networking APIs.
-
Added Preferences API (
java.util.prefs
) for storing user/system configuration data. -
Improved Security APIs including cryptographic extensions and certificate support.
-
Enhanced Swing with improved focus handling, tool-tip management, and drag-and-drop.
-
Introduced non-blocking I/O and memory-mapped files in NIO.
-
Improved garbage collection and overall JVM performance.
🔹 Java 5 (Sep 2004) – aka Java 1.5, "Tiger"
👉 Non-LTS but popular and widely adopted due to its major language enhancements
Introduced Generics (
List<String>
), enabling type-safe collections.-
Introduced Enhanced for loop (
for-each
) for iterating over arrays and collections. -
Added Autoboxing/Unboxing between primitives and wrapper classes (e.g.,
int ↔ Integer
). -
Introduced Typesafe Enums using the
enum
keyword. -
Added Varargs (
...
) to support variable-length method arguments. -
Introduced Annotations (Metadata) using
@interface
, enabling tools and frameworks support. -
Added Static Import (
import static
) to allow static members to be used without class prefix. -
Improved Concurrency API in
java.util.concurrent
(Executors, Locks, atomic variables). -
Enhanced JVM performance and class loading mechanism.
-
Introduced Formatted output (
System.out.printf
) viajava.util.Formatter
. -
Added Scanner class for simplified console input (
java.util.Scanner
). -
Updated Java Memory Model for better thread visibility and correctness.
-
Improved instrumentation and monitoring APIs for profiling and debugging.
🔹 Java 6 (Dec 2006) – "Mustang"
👉 Non-LTS but popular and widely adopted due to its performance improvements and enhanced developer tools.
Integrated Java Compiler API (
javax.tools
) for compiling Java code at runtime.-
Introduced Scripting support via
javax.script
(JSR 223) for running dynamic languages like JavaScript. -
Added JDBC 4.0 with features like automatic driver loading and SQL exception chaining.
-
Improved Web Services support with built-in JAX-WS 2.0 and JAXB 2.0 APIs.
-
Enhanced Monitoring and Management with better JMX (Java Management Extensions).
-
Added support for Pluggable Annotations Processing API (
javax.annotation.processing
). -
Updated Swing GUI with better system tray support and table sorting/filtering.
-
Enhanced Performance of JVM, especially startup time and garbage collection.
-
Integrated Windows Vista support and native look & feel updates.
-
Improved Java Web Start and Java Deployment Toolkit.
-
Removed support for older APIs and deprecated features (e.g., old CORBA APIs).
-
Upgraded JavaScript engine to Rhino for better scripting performance.
-
Introduced Thread dump on
Ctrl+Break
and better debugging support.
🔹 Java 7 (Jul 2011) – "Dolphin"
👉 Non-LTS but popular and widely adopted due to its language enhancements and NIO.2 API improvements.
Introduced try-with-resources for automatic resource management (ARM) with
AutoCloseable
.-
Added diamond operator (
<>
) to simplify generic instance creation. -
Enabled multi-catch in exception handling (
catch (IOException | SQLException e)
). -
Improved type inference and added underscores in numeric literals for readability.
-
Added Strings in switch statements for better control flow.
-
Introduced binary literals using prefix
0b
(e.g.,0b1010
). -
Introduced NIO.2 (New I/O) with
java.nio.file
package for file system access and watch service. -
Enhanced Fork/Join framework for parallelism in
java.util.concurrent
. -
Included JDBC 4.1 with enhanced capabilities.
-
Upgraded Locale and Unicode support to Unicode 6.0.
-
Improved class-loader architecture (ClassLoader close method and hierarchy fixes).
-
Integrated InvokeDynamic bytecode instruction to support dynamic languages on the JVM.
-
Deprecated some old APIs and provided cleaner replacements (like for file I/O).
-
Added support for IPv6 in new network APIs.
-
Improved performance, garbage collection, and support for multi-core systems.
🔹 Java 8 (Mar 2014)
👉 LTS release, extremely popular and widely adopted due to groundbreaking features like Lambda expressions, Streams API, and the new Date-Time API.
Introduced Lambda Expressions for writing anonymous functions concisely.
-
Added Streams API (
java.util.stream
) for functional-style processing of collections. -
Introduced Functional Interfaces (e.g.,
Predicate
,Function
,Consumer
) and@FunctionalInterface
annotation. -
Added Default and Static Methods in Interfaces to support backward compatibility.
-
Introduced java.time (Date and Time API), a modern replacement for
Date
andCalendar
. -
Added Optional<T> to avoid
null
references and express optional values. -
Introduced Nashorn JavaScript Engine for embedding JavaScript in Java applications.
-
Enhanced Collectors API for advanced aggregation (
Collectors.toList()
,joining()
, etc.). -
Improved type inference for generic methods and lambdas.
-
Added Repeatable Annotations using
@Repeatable
. -
Introduced Method References (
ClassName::methodName
) as shorthand for lambdas. -
Added CompletableFuture and enhancements to java.util.concurrent for better async programming.
-
Enhanced parallel processing using parallel streams.
-
Introduced Base64 encoding/decoding utility in
java.util.Base64
. -
Provided new security and performance improvements under the hood.
🔹 Java 9 (Sep 2017)
Introduced Java Platform Module System (JPMS), also known as Project Jigsaw, for modularizing the JDK and applications.
-
Added
jshell
(REPL) tool for interactive Java execution and experimentation. -
Introduced
var
-like private interface methods to support better code reuse (private methods in interfaces). -
Improved Stream API with new methods like
takeWhile()
,dropWhile()
,iterate()
. -
Added Optional enhancements including
ifPresentOrElse()
,or()
. -
Introduced Factory methods for immutable collections (
List.of()
,Set.of()
,Map.of()
). -
Enhanced Process API (
java.lang.ProcessHandle
) to manage OS-level processes better. -
Introduced Multi-release JARs to support different versions of class files in one JAR.
-
Improved JVM performance with a more compact string representation ("compact strings").
-
Added Segmented Code Cache for better memory management of compiled code.
-
Deprecated the CMS Garbage Collector (in preparation for removal).
-
Introduced Platform logging API (
System.Logger
) as a lightweight logging alternative. -
Improved stack-walking API (
StackWalker
) for efficient and flexible access to call stacks. -
Enhanced Unicode 8.0 support and locale data.
🔹 Java 10 (Mar 2018)
Introduced
var
keyword for local variable type inference.-
Added Application Class-Data Sharing (AppCDS) to improve startup performance and reduce memory footprint.
-
Introduced Garbage-Collector Interface to allow plug-and-play GC implementations.
-
Enhanced container awareness in JVM (for memory and CPU limits, important for Docker/Kubernetes).
-
Added Parallel Full GC for better performance with G1 Garbage Collector.
-
Introduced Thread-local handshakes to improve thread management and safe point operations.
-
Improved JVM compilation repository for better diagnostic information.
-
Consolidated JDK source code repository into a single Git repo.
-
Enabled Heap allocation on alternative memory devices (e.g., NV-DIMMs).
-
Marked
javah
tool as removed, fully integrated native header generation intojavac
.
🔹 Java 11 (Sep 2018)
👉 LTS release, widely adopted for long-term support and key additions like the HTTP Client API, var
in lambda parameters, and removal of outdated modules.
- Introduced
var
in lambda parameters for consistency and annotations. -
Added new String methods:
isBlank()
,lines()
,strip()
,repeat()
. -
Added new File methods:
readString()
,writeString()
inFiles
class. -
Introduced
HttpClient
API (standardized from incubator module in Java 9) for HTTP/2 and async requests. -
Added
Collection.toArray(IntFunction)
method for easier array conversions. -
Introduced Nest-based access control to improve access between nested classes.
-
Added Flight Recorder (JFR) for low-overhead profiling and diagnostics.
-
Added Z Garbage Collector (ZGC) – scalable low-latency GC (experimental).
-
Removed several legacy and deprecated modules/APIs, including:
-
Java EE modules (
java.xml.ws
,java.activation
, etc.) -
CORBA and related APIs
-
java.se.ee
aggregate module
-
-
Removed the
javaws
(Java Web Start) andappletviewer
tools. -
Removed
javah
tool (already deprecated in Java 10). -
Introduced Launch Single-File Source-Code Programs using
java MyApp.java
.
🔹 Java 12 (Mar 2019)
Introduced Switch Expressions (Preview) to simplify switch syntax and make it more expression-oriented.
-
Added JVM Constants API (
java.lang.constant
) for working with class file constants. -
Introduced Shenandoah Garbage Collector (Experimental) – low-pause-time GC for large heaps.
-
Improved G1 Garbage Collector to return unused heap memory to the OS.
-
Added Microbenchmarking support with the JMH-like
jdk.microbenchmark
module (for internal benchmarking). -
Improved default CDS (Class Data Sharing) archives to include system classes automatically.
-
Enhanced JVM startup and footprint by refining default class data sharing setup.
-
Improved error reporting and heap diagnostics, including detailed
NullPointerException
messages (experimental flag).
🔹 Java 13 (Sep 2019)
Introduced Text Blocks (Preview) to simplify writing multi-line string literals using
"""
.-
Enhanced Switch Expressions (Preview) with
yield
for returning values from blocks. -
Added Dynamic CDS Archives to improve application startup by enabling CDS after initial runs.
-
Reimplemented the legacy Socket API for better maintainability and performance.
-
Improved Z Garbage Collector (ZGC) by uncommitting unused memory back to the OS.
🔹 Java 14 (Mar 2020)
Finalized Switch Expressions (
switch
as expression withyield
).-
Introduced Records (Preview) to simplify data carrier classes (
record Point(int x, int y)
). -
Introduced Pattern Matching for
instanceof
(Preview) for cleaner type checks and casting. -
Added Helpful NullPointerExceptions with detailed messages showing what was
null
. -
Introduced
jdk.foreign
API (Incubator) for foreign-memory access outside the JVM heap. -
Added
jpackage
tool for packaging self-contained Java applications. -
Enhanced NVM support for Java heap on persistent memory devices.
-
Improved Garbage Collectors:
-
ZGC: Supports return of unused memory to OS (macOS, Windows support added).
-
G1 GC: Optimized heap region pinning.
-
-
Deprecated and removed several outdated CMS GC and other legacy features.
🔹 Java 15 (Sep 2020)
Finalized Text Blocks (
"""
) for multi-line, readable string literals.-
Introduced Sealed Classes (Preview) to restrict class inheritance explicitly.
-
Introduced Hidden Classes for dynamic frameworks and improved JVM performance.
-
Added EdDSA (Edwards-Curve Digital Signature Algorithm) for modern cryptographic support.
-
Enhanced Z Garbage Collector (ZGC) with support for macOS and Windows.
-
Removed the Nashorn JavaScript Engine (deprecated in Java 11).
-
Removed RMI Activation system (outdated remote object lifecycle management).
-
Re-implemented
java.util.Random
subclassSplittableRandom
for better statistical properties. -
Upgraded Garbage Collection (G1 and ZGC) and improved memory management.
-
Replaced legacy DatagramSocket API implementation with a modern, more maintainable version.
🔹 Java 16 (Mar 2021)
Finalized Records for compact, immutable data classes (
record Point(int x, int y)
).-
Finalized Pattern Matching for
instanceof
for cleaner and safer type checks. -
Added
jdk.incubator.foreign
API (Foreign Linker and Memory Access API, incubator). -
Introduced Sealed Classes (Second Preview) to control which classes can extend or implement a type.
-
Added Packaging Tool (
jpackage
) for native installers across platforms. -
Enabled Concurrent Thread-Stack Processing in the JVM for better performance.
-
Migrated Java source code to Git and GitHub (OpenJDK project).
-
Made the Z Garbage Collector (ZGC) concurrent class unloading capable.
-
Added Unix-Domain Socket Channel API to the standard library.
-
Strongly encapsulated JDK internal APIs, warning when reflective access is used.
-
Enabled C++14 language features in HotSpot for JVM code base modernization.
-
Enhanced Windows support (especially Windows/AArch64 port).
🔹 Java 17 (Sep 2021)
👉 LTS release, widely adopted for stabilizing modern features like sealed classes, pattern matching, and enhanced performance and security.
Finalized Sealed Classes to restrict inheritance and improve modeling.
-
Finalized Pattern Matching for
instanceof
for simplified type casting. -
Finalized Enhanced
switch
expressions from earlier previews. -
Introduced Foreign Function & Memory API (Incubator) to interact with native code.
-
Introduced Strong encapsulation of JDK internals by default (except for critical reflection).
-
Added
java.util.random
package with new random number generators (LXM, Xoshiro, SplitMix). -
Introduced New macOS rendering pipeline based on Apple’s Metal API.
-
Removed RMI Activation, long deprecated in earlier versions.
-
Removed Experimental AOT and JIT compiler (
jaotc
, Graal-based). -
Removed Applets and
appletviewer
tool, formally ending browser-based Java. -
Integrated Context-specific deserialization filters to boost serialization security.
-
Enhanced Performance, startup time, and GC behavior (ZGC and G1 improvements).
-
Made JEP 356: Enhanced Pseudo-Random Number Generators standard.
🔹 Java 18 (Mar 2022)
Introduced Simple Web Server (
jwebserver
) for prototyping and testing static content.-
Introduced UTF-8 as the default charset for the standard Java APIs.
-
Added Code Snippets in JavaDoc with the new
@snippet
tag for richer documentation. -
Introduced Vector API (Third Incubator) for vectorized computations using SIMD hardware.
-
Introduced Foreign Function & Memory API (Second Incubator) to call native libraries without JNI.
-
Introduced Internet-Address Resolution SPI for custom DNS resolution implementations.
-
Introduced
finalization
deprecation warning as it will be removed in future versions. -
Improved Security and Performance enhancements across the platform.
-
Continued JVM and garbage collector refinements (especially for G1, ZGC).
🔹 Java 19 (Sep 2022)
Introduced Virtual Threads (Preview) via Project Loom for lightweight, scalable concurrency.
-
Introduced Structured Concurrency (Incubator) to simplify multithreaded code and cancellation.
-
Added Record Patterns (Preview) for enhanced pattern matching and data deconstruction.
-
Added Pattern Matching for
switch
(Preview) for expressive and type-safe control flow. -
Updated Foreign Function & Memory API (Third Incubator) with more stable design.
-
Continued incubation of Vector API (Fourth Incubator) for high-performance math operations.
-
Enhanced platform performance and GC tuning (notably for ZGC and G1).
-
Strengthened JDK security and modernized internal APIs.
🔹 Java 20 (Mar 2023)
Continued Virtual Threads (Second Preview) to simplify concurrency at scale.
-
Continued Structured Concurrency (Second Incubator) for managing thread lifecycles hierarchically.
-
Continued Record Patterns (Second Preview) for more powerful pattern matching.
-
Continued Pattern Matching for
switch
(Second Preview) for flexible and safe control flow. -
Enhanced Foreign Function & Memory API (Fourth Incubator) with usability improvements.
-
Continued development of Vector API (Fifth Incubator) for vectorized math operations.
-
General performance, stability, and GC improvements across JVM subsystems.
🔹 Java 21 (Sep 2023)
👉 LTS release, popular for finalizing virtual threads, pattern matching, record patterns, and introducing modern APIs like string templates and sequenced collections.
Finalized Virtual Threads for lightweight concurrency via Project Loom.
-
Finalized Record Patterns for elegant deconstruction of record objects.
-
Finalized Pattern Matching for
switch
for safer and more expressive control flow. -
Finalized Sequenced Collections API for ordered
List
,Set
, andMap
interfaces. -
Finalized String Templates (Preview) for safer and more readable string interpolation.
-
Introduced Scoped Values (Preview) for safe, immutable data sharing with virtual threads.
-
Continued Foreign Function & Memory API (Third Preview) for efficient native code integration.
-
Enhanced Structured Concurrency (Preview) for better thread management.
-
Updated Vector API (Sixth Incubator) for advanced SIMD processing.
-
Improved Garbage Collection, JIT compilers, and overall JVM performance.
-
Removed deprecated legacy features and promoted stronger encapsulation of internal APIs.