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:
- JEP-306: Restore Always-Strict Floating-Point Semantic
- 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-407: Remove RMI Activation
- JEP-409: Sealed Classes
- section: Java SE 17: Sealed Classes
- JEP-410: Remove the Experimental AOT and JIT Compiler
- JEP-411: Deprecate the Security Manager for Removal
- JEP-415: Context-Specific Deserialization Filters
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:
- JEP-347: Enable C++14 Language Features
- JEP-357: Migrate from Mercurial to Git
- JEP-369: Migrate to GitHub
- JEP-376: ZCG: Concurrent Thread-Stack Processing
- JEP-380: Unix-Domain Socket Channels
- JEP-386: Apline Linux Port
- JEP-387: Elastic Metaspace
- JEP-388: Windows/AArch64 Port
- JEP-390: Warnings for Value-Based Classes
- JEP-392: Packing Tool
- section: Java SE 16: Packaging Tool
- JEP-394: Pattern Matching for instanceof
- JEP-395: Records
- section: Java SE 15: Records
- JEP-396: Strongly Encapsulate JDK Internals by Default
Preview/Incubator/Experimental:
- JEP-338: Vector API
- JEP-389: Foreign Linker API
- JEP-393: Foreign-Memory Access API
- JEP-397: Sealed Classes
- section: Java SE 17: Sealed Classes
- section: Java Tutorials
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:
- JEP-339: Edwards-Curve Digital Signature Algorithm (EdDSA)
- JEP-371: Hidden Classes
- JEP-373: Reimplement the Legacy DatagramSocket API
- JEP-377: ZGC: A scalable low-latency garbage collector
- JEP-378: Text blocks
- section: Java SE 15: Text Blocks
- section: Java tutorials
- JEP-379: Shenandoah: A low-pause-time garbage collector
Preview/Incubator/Experimental:
- JEP-360: Sealed Classes
- section: Java SE 17: Sealed Classes
- section: Java Tutorials
- JEP-375: Pattern Matching for instanceof (2nd preview)
- JEP-383: Foreign-Memory Access API (2nd incubation)
- JEP-384: Records (2nd preview)
- section: Java SE 15: Records
- section: Java tutorials
Deprecated:
Removal:
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:
- JEP-305: Pattern Matching for instanceof
- JEP-343: Packaging Tool (incubator)
- JEP-368: Text Blocks (2nd preview)
- section: Java SE: Text Blocks
- section: Java tutorials
- JEP-359: Records
- section: Java SE: Records
- section: Java tutorials
- JEP-370: Foreign-Memory Access API (incubator)
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:
- JEP-354: Switch Expression
- JEP-355: Text blocks
- section: Java SE: Text Blocks
- section: Java tutorials
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:
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:
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)
- section: Java Platform Module System (JPMS)
- section: Java Tutorials
- 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:
- JSR-335, JEP-126: Language-level support for lambda expressions under project Lambda
- JSR-223, JEP-174: Project Nashorn, a JavaScript runtime
- JSR-308, JEP-104: Annotation for Java types
- JSR-337, JEP-120: Repeating annotations
- JSR-310, JEP-150: Date and time API
- JEP-178: Statically-linked JNI libraries
- JEP-153: Launch JavaFX applications
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