Java Versions and release details

Java platform is continually evolving. After delays due to the complex features like Lambda (JavaSE8) or Modules (JavaSE9) Oracle has announced 6 months released cadence. The intension of moving to the 6 month release model is to prevent significant delays due to key features and support the platform evolution speed. Oracle will designate a release, every 3 years, as a Long-Terms-Support (LTS) release. Once a new feature release is made available, any previous non-LTS release will be considered as superseded. Oracle has also introduced the term “preview features”. It means that the feature specification, design and implementation are complete, but it is not permanent. Such “preview feature” may be removed or may exist in different form in future JDK releases. New Java platform releases involve also more backward incompatibility risk as some of APIs/modules are going to be removed. Such APIs/modules are marked as Deprecated and listed in release notes. When API/Module becomes to be deprecated it indicates that it may be removed from the next major release. There was also introduced the term “incubator modules” (JEP-11), which represents non-final APIs or tools in the hands of developers.

link to Binaries: OpenJDK Archive, AdoptOpenJDK, BellsoftOpenJDK, Azul-ZuluOpenJDK, RedHat-OpenJDK, Amazon-Corretto-OpenJDK

The following section provides an information about the new major changes in published Java version releases:


Java SE 17 (released: 2021.09.14, LTS-Long Term Support till 09.2029)

Briefly: Oracle has announced a simpler license conditions for Oracle JDK 17 and later. It basically means JDK is free to use till the year after next LTS. Oracle proposed to shorten the cadence of LTS support from 3 to 2 years. It means next LTS release may be in September 2023. The release Java SE 17 contains many improvements, bug fixes and new enhancements as Sealed Classes, Restore always-strict floating point semantic, enhance pseudo-random numbers generator and more (download openjdk)

Added:

Preview/Incubator/Experimental


Java SE 16 (released: 2021.03.16)

Briefly: added Records, Pattern Matching Instanceof, Records, Strongly Encapsulated JDK Internals by Default, ZGC: Concurrent Thread-Stack Processing, full migration to the Git/GitHub and many other improvements (download openjdk)

Added:

Preview/Incubator/Experimental:

Java SE 15 (released: 2020.09.15)

Briefly: added support for multi-line string literals (Text blocks), garbage collectors Shenandoah and Z (ZGC) are now read for use in production, support for Oracle’s Solaris system is dropped. The Nashorn JavaScript Engine is removed together with some root CA certificates  (download openjdk)

Added:

Preview/Incubator/Experimental:

Deprecated:

  • JEP-374: Disable and Deprecated Biased Locking
  • JEP-385: Deprecate RMI Activation for Removal

Removal:

  • JEP-372: Remove the Nashorn JavaScript Engine
  • JEP-381: Remove the Solaris and SPARC Ports

Java SE 14 (released 2020.03.17)

Briefly: the release contains some features and bug fixes.

Added:

  • JEP-345: NUMA(non-uniform memory access)-Aware Memory Allocation for G1
  • JEP-349: JFR (Java Flight Recorder) Event Streaming
  • JEP-352: Non-volatile mapped byte buffers
  • JEP-358: Helpful NullPointerExceptions
  • JEP-361: Switch Expressions (Standard)
  • JEP-364: ZGC on macOS
  • JEP-365: ZGC on Windows

Preview/Incubator/Experimental:

Deprecated:

  • JEP-362: Deprecated the Solaris and SPARC Ports
  • JEP-366: Deprecate the ParallelScavenge + SerialOld GC Combination

Removal:

  • JEP-363: Remove the concurrent Mark Sweep (CMS) garbage collector
  • JEP-367: Remove the Pack200 Tools and API

Java SE 13 (released 2019.09.17)

Briefly: the release contains some features and bug fixes. (download openjdk)

Added:

  • JEP-350: Dynamic CDS (Class-Data Sharing) Archives
  • JEP-351: ZGC: Uncommit Unusd Memory
  • JEP-353: Remimplement the Legacy Socket API

Preview/Incubator/Experimental:

Java SE 12 (released 2019.03.19)

Briefly: the release contains some features and bug fixes.

Added:

  • JEP-230: Microbenchmark suite
  • JEP-334: JVM Constants API
  • JEP-340: One AArch64 Port, not two
  • JEP-341: Default CDS (Class-Data Sharing) Archives
  • JEP-344: Abortable Mixed Collections for G1
  • JEP-346: Promptly Return Unused Committed Memory from G1

Preview/Incubator/Experimental:

  • JEP-189: Shenandoah: A low-pause-time garbage collector (experimental)
  • JEP-325: Switch Expression

Java SE 11 (released 2018.09.25, LTS-Long Term Support till 09.2023)

Briefly: the release contains new features and bug fixes. It is marked as Long-Term-Support (LTS) release. A number of features were dropped: eg. Java Applets and Java Web Start (no longer available)

Added:

  • JEP-181: Nest-Based Access Control
  • JEP-309: Dynamic Class-File constants
  • JEP-315: Improve AArch64 Intrinsics
  • JEP-318: Epsilon: A No-Op garbage collector
  • JEP-321: HTTP Client (standard)
  • JEP-323: Local-Variable Syntax for Lambda Parameters
  • JEP-324: Key Agreement with Curve25519 and Curve448
  • JEP-327: Unicode 10
  • JEP-328: Flight Recorder
  • JEP-329: ChaCha20 and Poly1305 Cryptographic Algorithms
  • JEP-330: Launch Single-File Source-Code Programs
  • JEP-331: Low-Overhead Heap Profiling
  • JEP-332: Transport Layer Security (TLS) 1.3

Preview/Incubator/Experimental:

  • JEP-333: ZGC: A Scalable Low-Latency garbage collector (experimental)

Deprecated:

  • JEP-335: Deprecate the Nashorn JavaScript Engine
  • JEP-336: Deprecate the Pack200 Tools and API

Removal:

  • JEP-320: Remove the Java EE and CORBA Modules
  • Java applets and Java Web Start no longer available

Java SE 10 (released 2018.03.20)

Briefly: release contains 12 new features and bug fixes

Added:

  • JEP-286: Local-Variable Type Interface
  • JEP-296: Consolidate the JDK Forest into a Single Repository
  • JEP-304: Garbage-Collector Interface
  • JEP-307: Parallel Full GC for G1
  • JEP-310: Application Class-Data Sharing (CDS)
  • JEP-312: Thread-Local Handshakes
  • JEP-314: Additional Unicode Language-Tag Expressions
  • JEP-316: Heap Allocation on Alternative Memory Devices
  • JEP-319: Root Certificates
  • JEP-322: Time-Based Release Versioning

Preview/Incubator/Experimental:

  • JEP-317: Experimental Java-Based JIT Compiler

Removal:

  • JEP-313: Remove the Native-Header Generation Tool (javah)

Java SE 9 (released 2017.09.21)

Briefly: important release due to controversial acceptance of the Jigsaw Project implementation.

Added:

  • JSR-376: Modularization of tje JDK under Project Jigsaw (Java Platform Module System)
  • JEP-222: JShell: The Java Shell (a Java REPL)
  • JEP-223: New Version-String Scheme
  • JEP-295: Ahead-of-time compilation
  • JEP-268: XML catalogs
  • JEP-266: More concurrency updates. It includes a Java implementation of Reactive Streams, including a new Flow class that included the interfaces previously provided by Reactive Streams
  • JEP-193: Variable handles: define a standard means to invoke equivalents of various java.util.concurrent.atomic and sun.misc.Unsafe operations
  • JEP-282: jlink: The Java Linker: create a tool that can assemble and optimze a set of modules and their dependencies into a custom run-time image. It effectively allows to produce a fully usable executable including the JVM to run it.
  • JEP-263: HiDPI graphics: automatic scaling and sizing
  • JEP-254: Compact Strings
  • JEP-213: Milling Project Coin
    • Allow @SafeVarargs on private instance methods
    • Allow effectively-final variables to be used as resources in try-with-resources statement
    • Allow diamond and anonymous classes if the argument type of the inferred type is denotable
    • Complete the removal, begun in Java SE 8, of underscore from the set of legal identifier names
    • Support for private methods in interfaces

Removal:

  • JavaDB was removed from JDK

Java SE 8 (released 2014.03.18)

Briefly: includes some features that were planned for Java SE 7 but latter deferred. Work on features was organized in terms of JDK Enhancement Proposals (JEPs). Unsigned integer arithmetic has been added.

Added:

Removal:

  • JEP-122: Remove the permanent generation

Java SE 7 (released 2011.7.7, available for developers 2011.07.28)

Briefly: The development has been organized into 13th milestones. Major changes added as JVM dynamic languages support, Java Fork and Join framework via ForkJoinPool, try-statement or String in switch and more.

Added:

  • JVM support for dynamic languages, with new invokedynamic bytecode under JSR-292
  • Compressed 64-bit pointers
  • Project Coin:
    • String in switch
    • Automatic resource management in try-statement
    • Improved type interface for generic instance creation, aka the diamond operator <>
    • Simplified varargs method declaration
    • Allowing underscores in numeric literals
    • Catching multiple exceptions types and rethrowing exceptions with improved type checking
  • JSR-166: Concurrency utilities
  • JSR-203: New file I/O library
  • Timsort is used to sort collections and arrays of objects instead of merge sort
  • Library-level support for elliptic curve crypthography algorithms
  • An XRender pipeline for 2D
  • New platform APIs for graphics
  • Enhanced library-level support for new networks protocols (SCTP, Socket Direct Protocol)
  • Upstream updates to XML and Unicode
  • Java deployment rule sets