Java is a high-level, class-based, object-oriented programming language that is designed to have as few implementation dependencies as possible. It is a general-purpose programming language intended to let programmers write once, run anywhere (WORA), meaning that compiled Java code can run on all platforms that support Java without the need to recompile

There were five primary goals in the creation of the Java language:

  • It must be simple, object-oriented, and familiar.
  • It must be robust and secure.
  • It must be architecture-neutral and portable.
  • It must execute with high performance.
  • It must be interpreted, threaded, and dynamic.

As of September 2021, Java 8, 11 and 17 are supported as Long-Term Support (LTS) versions. Major release versions of Java, along with their release dates

Java 8 LTS (March 18, 2014)
  • JSR 335 : Lambda expression support in APIs  e.g.  (parameters) -> expression
  • Stream API e.g.
    List<String> filteredList = items.stream() .filter(e -> (!e.startsWith(prefix))) .collect(Collectors.toList());
  • Functional interface and default methods  @FunctionalInterface annotation e.g.
    @FunctionalInterface
    public interface MyFirstFunctionalInterface { public void firstWork(); }
  • Optionals
  • Nashorn – JavaScript runtime which allows developers to embed JavaScript code within applications
  • Annotation on Java Types
  • Unsigned Integer Arithmetic
  • Repeating annotations
  • JSR-310 : New Date and Time API e.g.
    Date class has even become obsolete. The new classes intended to replace Date class are LocalDateLocalTime and LocalDateTime.
  • JEP 178 :Statically-linked JNI libraries
  • JavaFX applications from jar files
  • Remove the permanent generation from GC
Java 9 (September 21, 2017)

Java 9 was made available on September, 2017. The biggest change is the modularization i.e. Java modules.

Some important features/changes in Java 9 are:

  • Java platform module system
  • Interface Private Methods
  • HTTP 2 Client
  • JShell – REPL Tool
  • Platform and JVM Logging
  • Process API Updates
  • Collection API Updates
  • Improvements in Stream API
  • Multi-Release JAR Files
  • @Deprecated Tag Changes
  • Stack Walking
  • Java Docs Updates
  • Miscellaneous Other Features
Java 10 (March 20, 2018)

After Java 9 release, Java 10 came very quickly. Unlike its previous release, Java 10 does not have that many exciting features, still, it has a few important updates which will change the way you code, and other future Java versions.

  • JEP 286: Local Variable Type Inference
  • JEP 322: Time-Based Release Versioning
  • JEP 304: Garbage-Collector Interface
  • JEP 307: Parallel Full GC for G1
  • JEP 316: Heap Allocation on Alternative Memory Devices
  • JEP 296: Consolidate the JDK Forest into a Single Repository
  • JEP 310: Application Class-Data Sharing
  • JEP 314: Additional Unicode Language-Tag Extensions
  • JEP 319: Root Certificates
  • JEP 317: Experimental Java-Based JIT Compiler
  • JEP 312: Thread-Local Handshakes
  • JEP 313: Remove the Native-Header Generation Tool
Java 11 LTS (September 25, 2018)

Java 11 (released on September 2018) includes many important and useful updates. Let’s see the new features and improvements, it brings for developers and architects.

  • HTTP Client API
  • Launch Single-File Programs Without Compilation
  • String API Changes
  • Collection.toArray(IntFunction)
  • Files.readString() and Files.writeString()
  • Optional.isEmpty()
Java 12 (March 19, 2019)

Java 12 was released on March 19, 2019. Let’s see the new features and improvements, it brings for developers and architects.

  • Collectors.teeing() in Stream API
  • String API Changes
  • Files.mismatch(Path, Path)
  • Compact Number Formatting
  • Support for Unicode 11
  • Switch Expressions (Preview)
Java 13 (September 17, 2019)

ava 13 (released on September 17, 2019) had fewer developer-specific features. Let’s see the new features and improvements, it brought for developers and architects.

  • JEP 355 – Text Blocks (Preview)
  • JEP 354 – Switch Expressions Enhancements (Preview)
  • JEP 353 – Reimplement the Legacy Socket API
  • JEP 350 – Dynamic CDS Archive
  • JEP 351 – ZGC: Uncommit Unused Memory
  • FileSystems.newFileSystem() Method
  • DOM and SAX Factories with Namespace Support
Java 14 (March 17, 2020)

Java 14 (released on March 17, 2020) is the latest version available for JDK. Let’s see the new features and improvements, it brings for developers and architects.

  • JEP 305 – Pattern Matching for instanceof (Preview)
  • JEP 368 – Text Blocks (Second Preview)
  • JEP 358 – Helpful NullPointerExceptions
  • JEP 359 – Records (Preview)
  • JEP 361 – Switch Expressions (Standard)
  • JEP 343 – Packaging Tool (Incubator)
  • JEP 345 – NUMA-Aware Memory Allocation for G1
  • JEP 349 – JFR Event Streaming
  • JEP 352 – Non-Volatile Mapped Byte Buffers
  • JEP 363 – Remove the Concurrent Mark Sweep (CMS) Garbage Collector
  • JEP 367 – Remove the Pack200 Tools and API
  • JEP 370 – Foreign-Memory Access API (Incubator)
Java 15 (September 15, 2020)

Java 15 was released on 15th Sep’2020. It continues to support various preview features in previous JDK releases; and has also introduced some new features.

  • JEP 360 – Sealed Classes and Interfaces (Preview) 
  • JEP 339 – EdDSA Algorithm
  • JEP 371 – Hidden Classes 
  • JEP 375 – Pattern Matching for instanceof (Second Preview)
  • JEP 372 – Removed Nashorn JavaScript Engine 
  • JEP 373 – Reimplement the Legacy DatagramSocket API
  • JEP 384 – Records (Second Preview)
  • JEP 378 – Text Blocks become a standard feature.
Java 16 (March 16, 2021)

Java 16 was released on 16 March 20121. It was largely a maintenance release, except it made the Java Records and Pattern matching the standard features of the Java language.

  • JEP 338: Vector API (Incubator)
  • JEP 347: Enable C++14 Language Features
  • JEP 357: Migrate from Mercurial to Git
  • JEP 369: Migrate to GitHub
  • JEP 376: ZGC: Concurrent Thread-Stack Processing
  • JEP 380: Unix-Domain Socket Channels
  • JEP 386: Alpine Linux Port
  • JEP 387: Elastic Metaspace
  • JEP 388: Windows/AArch64 Port
  • JEP 389: Foreign Linker API (Incubator)
  • JEP 390: Warnings for Value-Based Classes
  • JEP 392: Packaging Tool
  • JEP 393: Foreign-Memory Access API (Third Incubator)
  • JEP 394: Pattern Matching for instanceof
  • JEP 395: Records
  • JEP 396: Strongly Encapsulate JDK Internals by Default
  • JEP 397: Sealed Classes (Second Preview)
Java 17 TLS (September 14, 2021)

Java 17 was released on September 14, 2021. Java 17 is an LTS (Long Term Support) release, like Java 11 and Java 8. Spring 6 and Spring boot 3 will have first-class support for Java 17. So it is a good idea to plan for upgrading to Java 17.

The below-listed 14 JEPs are part of Java 17.

  • JEP-306 – Restore Always-Strict Floating-Point Semantics
  • JEP-356 – Enhanced Pseudo-Random Number Generators
  • JEP-382 –  New macOS Rendering Pipeline
  • JEP-391-  macOS/AArch64 Port
  • JEP-398 – Deprecate the Applet API for Removal
  • JEP-403 – Strongly Encapsulate JDK Internals
  • JEP-406 –  Pattern Matching for switch (Preview)
  • JEP-407 – Remove RMI Activation
  • JEP-409 – Sealed Classes
  • JEP-410 – Remove the Experimental AOT and JIT Compiler
  • JEP-411 – Deprecate the Security Manager for Removal
  • JEP-412 – Foreign Function & Memory API (Incubator)
  • JEP-414 – Vector API (Second Incubator)
  • JEP-415 – Context-Specific Deserialization Filters
Java 18 (March 22, 2022)

Java 18 GA was released on 22 March 2022. It has nine new developer features, including a simple web server and another preview of pattern matching for switch.

The below-listed 14 JEPs are part of Java 18.

  • JEP-400: UTF-8 by Default
  • JEP-408: Simple Web Server
  • JEP-413: Code Snippets in Java API Documentation
  • JEP-416: Reimplement Core Reflection with Method Handles
  • JEP-417: Vector API (Third Incubator)
  • JEP-418: Internet-Address Resolution SPI
  • JEP-419: Foreign Function & Memory API (Second Incubator)
  • JEP-420: Pattern Matching for switch (Second Preview)
  • JEP-421: Deprecate Finalization for Removal