Java Versions

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.



Below is a list of Java versions along with their key features.

🔹 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 and Runnable.

  • Included exception handling with try, catch, finally, throw, and throws.

  • 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 and ResourceBundle.

  • 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.) under java.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) with Permission, 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(), and resume() 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) via java.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 and Calendar.

  • 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 into javac.


🔹 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() in Files 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) and appletviewer 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 with yield).

  • 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 subclass SplittableRandom 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, and Map 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.