Features

This page describes the changes introduced within each version.

Language-related changes should normally have a validator, used in conjunction with the grammar, as part of the parsing process.

Where a change is not a language-related change (e.g. JVM and garbage collection changes), this is marked as “Not Applicable (NA)”.

JDK 1.0 - January 1996

Source: https://en.wikipedia.org/wiki/Java_version_history#JDK_1.0

JDK 1.1 - February 1997

Source: https://en.wikipedia.org/wiki/Java_version_history#JDK_1.1

JDK 1.2 - December 1998

Source: https://en.wikipedia.org/wiki/Java_version_history#J2SE_1.2

JDK 1.3 - May 2000

Source: https://en.wikipedia.org/wiki/Java_version_history#J2SE_1.3

JDK 1.4 - February 2002

Source: https://en.wikipedia.org/wiki/Java_version_history#J2SE_1.4

JDK 5 - September 2004

Source: https://en.wikipedia.org/wiki/Java_version_history#J2SE_5.0

JDK 6 - December 2006

Source: https://en.wikipedia.org/wiki/Java_version_history#Java_SE_6

JDK 7 - July 2011

Source: https://en.wikipedia.org/wiki/Java_version_history#Java_SE_7

JDK 8 - March 2014

Source: https://en.wikipedia.org/wiki/Java_version_history#Java_SE_8

  • JSR 335, JEP 126: Language-level support for lambda expressions (officially, lambda expressions; unofficially, closures) under Project Lambda and default methods (virtual extension methods) which allow the addition of methods to interfaces without breaking existing implementations. There was an ongoing debate in the Java community on whether to add support for lambda expressions. Sun later declared that lambda expressions would be included in Java and asked for community input to refine the feature. Supporting lambda expressions also enables functional-style operations on streams of elements, such as MapReduce-inspired transformations on collections. Default methods allow an author of an API to add new methods to an interface without breaking the old code using it. Although it was not their primary intent, default methods also allow multiple inheritance of behavior (but not state).
  • JSR 223, JEP 174: Project Nashorn, a JavaScript runtime which allows developers to embed JavaScript code within applications
  • JSR 308, JEP 104: Annotation on Java types, Unsigned integer arithmetic
  • 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 (direct launching of JavaFX application JARs)
  • JEP 122: Remove the permanent generation

JDK 9 - September 2017

Source: https://en.wikipedia.org/wiki/Java_version_history#Java_SE_9

  • JSR 376: Modularization of the JDK under Project Jigsaw (Java Platform Module System)
  • JEP 222: JShell: The Java Shell (a Java REPL)
  • 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 the 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 optimize 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. JavaDB was removed from JDK
  • JEP 263: HiDPI graphics: automatic scaling and sizing
  • JEP 254: Compact Strings
  • JEP 213: Milling Project Coin

JDK 10 - March 2018

Source: https://openjdk.java.net/projects/jdk/10/

Java 10 support complete on 25/Feb/2018

JEPStatusJavaParser SinceDescription
JEP 286ReleaseSupported Since: v3.5.15
Released on: 25/Feb/2018
Local-Variable Type Inference
JEP 296ReleaseNot Applicable - Not a language specification change (NA)Consolidate the JDK Forest into a Single Repository
JEP 304ReleaseNot Applicable - Not a language specification change (NA)Garbage-Collector Interface
JEP 307ReleaseNot Applicable - Not a language specification change (NA)Parallel Full GC for G1
JEP 310ReleaseNot Applicable - Not a language specification change (NA)Application Class-Data Sharing
JEP 312ReleaseNot Applicable - Not a language specification change (NA)Thread-Local Handshakes
JEP 313ReleaseNot Applicable - Not a language specification change (NA)Remove the Native-Header Generation Tool (javah)
JEP 314ReleaseNot Applicable - Not a language specification change (NA)Additional Unicode Language-Tag Extensions
JEP 316ReleaseNot Applicable - Not a language specification change (NA)Heap Allocation on Alternative Memory Devices
JEP 317ExperimentalNot Applicable - Not a language specification change (NA)Experimental Java-Based JIT Compiler
JEP 319ReleaseNot Applicable - Not a language specification change (NA)Root Certificates
JEP 322ReleaseNot Applicable - Not a language specification change (NA)Time-Based Release Versioning

JDK 11 - September 2018

Source: https://openjdk.java.net/projects/jdk/11/

Java 11 support complete on 19/Aug/2018

JEPStatusJavaParser SinceDescription
JEP 323ReleaseSupported Since: v3.xx.yy
Released on: dd/mmm/yyyy
Local-Variable Syntax for Lambda Parameters
JEP 327ReleaseDiscussion Needed JEP327Unicode 10
JEP 181ReleaseDiscussion Needed JEP181Nest-Based Access Control
JEP 309ReleaseNot Applicable - Not a language specification change (NA)Dynamic Class-File Constants
JEP 315ReleaseNot Applicable - Not a language specification change (NA)Improve Aarch64 Intrinsics
JEP 318ReleaseNot Applicable - Not a language specification change (NA)Epsilon: A No-Op Garbage Collector
JEP 320ReleaseNot Applicable - Not a language change (NA) JEP320Remove the Java EE and CORBA Modules
JEP 321ReleaseNot Applicable - Not a language specification change (NA)HTTP Client (Standard)
JEP 324ReleaseNot Applicable - Not a language specification change (NA)Key Agreement with Curve25519 and Curve448
JEP 328ReleaseNot Applicable - Not a language specification change (NA)Flight Recorder
JEP 329ReleaseNot Applicable - Not a language specification change (NA)ChaCha20 and Poly1305 Cryptographic Algorithms
JEP 330ReleaseNot Applicable - Not a language specification change (NA)Launch Single-File Source-Code Programs
JEP 331ReleaseNot Applicable - Not a language specification change (NA)Low-Overhead Heap Profiling
JEP 332ReleaseNot Applicable - Not a language specification change (NA)Transport Layer Security (TLS) 1.3
JEP 333ExperimentalNot Applicable - Not a language specification change (NA)ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
JEP 335ReleaseNot Applicable - Not a language specification change (NA)Deprecate the Nashorn JavaScript Engine
JEP 336ReleaseNot Applicable - Not a language specification change (NA)Deprecate the Pack200 Tools and API
Footnotes:
  • JEP181 - Based on a cursory reading of this JEP, it is unclear if this is a change that affects JavaParser. Comments/discussion on this are welcomed.
  • JEP327 - Based on a cursory reading of this JEP, it is unclear if this is a change that affects JavaParser. Comments/discussion on this are welcomed.
  • JEP320 - JEP 320 is marked as NA. This is because JavaParser does not make use of classes within these packages, and any users of JavaParser will need to provide the relevant files in order to do parsing/solving (e.g. as source files, a jar, or via reflection).

JDK 12 - March 2019

Source: https://openjdk.java.net/projects/jdk/12/

Parsing support for Java 12 (including preview features) complete on 03/Feb/2019

Resolution support for Java 12 complete on ??/??/2019

JEPStatusJavaParser SinceDescription
JEP 325PreviewSupported Since: v3.11.0
Released on: 03/Feb/2019
Switch Expressions (Preview)
JEP 189ExperimentalNot Applicable - Not a language specification change (NA)Shenandoah: A Low-Pause-Time Garbage Collector (Experimental)
JEP 230ReleaseNot Applicable - Not a language specification change (NA)Microbenchmark Suite
JEP 334ReleaseNot Applicable - Not a language specification change (NA)JVM Constants API
JEP 340ReleaseNot Applicable - Not a language specification change (NA)One AArch64 Port, Not Two
JEP 341ReleaseNot Applicable - Not a language specification change (NA)Default CDS Archives
JEP 344ReleaseNot Applicable - Not a language specification change (NA)Abortable Mixed Collections for G1
JEP 346ReleaseNot Applicable - Not a language specification change (NA)Promptly Return Unused Committed Memory from G1

JDK 13 - September 2018

Source: https://openjdk.java.net/projects/jdk/13/

No language specification changes in JDK 13 -- thus no “complete” date. Details of preview support is below.

JEPStatusJavaParser SinceDescription
JEP 354PreviewSupported Since: v3.11.0
Released on: 03/Feb/2019
Switch Expressions (Preview)
JEP 355PreviewSupported Since: v3.14.0
Released on: 05/May/2019
Text Blocks (Preview)
JEP 350ReleaseNot Applicable - Not a language specification change (NA)Dynamic CDS Archives
JEP 351ReleaseNot Applicable - Not a language specification change (NA)ZGC: Uncommit Unused Memory
JEP 353ReleaseNot Applicable - Not a language specification change (NA)Reimplement the Legacy Socket API

JDK 14 - March 2020

Source: https://openjdk.java.net/projects/jdk/14/

Switch support was complete during preview status.

The preview features of records are work-in-progress.

JEPStatusJavaParser SinceDescription
JEP 361ReleaseSupported Since: v3.xx.yy
Released on: dd/mmm/yyyy
Switch Expressions (Standard)
JEP 3682nd PreviewSupported Since: v3.14.0
Released on: 05/May/2019
Text Blocks (Second Preview)
JEP 305PreviewSupported Since: v3.18.0
Released on: 01/Dec/2020
Pattern Matching for instanceof (Preview)
JEP 359PreviewPartial Support Since: v3.21.0
Released on: 11/April/2020 JEP343
Records (Preview)
JEP 343IncubatorNot Applicable (NA)JEP343Packaging Tool (Incubator)
JEP 345ReleaseNot Applicable - Not a language specification change (NA)NUMA-Aware Memory Allocation for G1
JEP 349ReleaseNot Applicable - Not a language specification change (NA)JFR Event Streaming
JEP 352ReleaseNot Applicable - Not a language specification change (NA)Non-Volatile Mapped Byte Buffers
JEP 358ReleaseNot Applicable - Not a language specification change (NA)Helpful NullPointerExceptions
JEP 362ReleaseNot Applicable - Not a language specification change (NA)Deprecate the Solaris and SPARC Ports
JEP 363ReleaseNot Applicable - Not a language specification change (NA)Remove the Concurrent Mark Sweep (CMS) Garbage Collector
JEP 364ReleaseNot Applicable - Not a language specification change (NA)ZGC on macOS
JEP 365ReleaseNot Applicable - Not a language specification change (NA)ZGC on Windows
JEP 366ReleaseNot Applicable - Not a language specification change (NA)Deprecate the ParallelScavenge + SerialOld GC Combination
JEP 367ReleaseNot Applicable - Not a language specification change (NA)Remove the Pack200 Tools and API
JEP 370ReleaseNot Applicable - Not a language specification change (NA)Foreign-Memory Access API (Incubator)
Footnotes:
  • JEP343 - JEP 343 is marked as not applicable, as it relates to packaging of apps - e.g. as .exe/.msi/.deb/.rpm/.pkg/.dmg. The JEP describes the layout/structure of the output file, suggesting that maybe in the future the files may be examined, and potentially used similarly to a .jar or set of .class files. This is not going to be actively pursued (especially since this is still in the incubator stage), though tested PRs are always welcome.

  • JEP359 - The behaviour of records changed between preview/2nd preview/release. Unless otherwise stated, the JavaParser implementation follows the released behaviour. Additionally, note that “partial” support refers to javaparser-core being complete since 3.21.0, and javaparser-symbol-solver-core support is TBC.

JDK 15 - September 2020

Source: https://openjdk.java.net/projects/jdk/15/

Note: Unless otherwise stated, the JavaParser implementations of features follows the released behaviour.

JEPStatusJavaParser SinceDescription
JEP 378ReleaseSupported Since: v3.14.0
Released on: 05/May/2019
Text Blocks
JEP 360PreviewSealed Classes (Preview)
JEP 384ReleasePartial Support Since: v3.21.0
Released on: 11/April/2020 JEP384
Records (Second Preview)
JEP 375ReleaseSupported Since: v3.18.0
Released on: 01/Dec/2020
Pattern Matching for instanceof (Second Preview)
JEP 339ReleaseNot Applicable - Not a language specification change (NA)Edwards-Curve Digital Signature Algorithm (EdDSA)
JEP 371ReleaseNot Applicable - Not a language specification change (NA)Hidden Classes
JEP 372ReleaseNot Applicable - Not a language specification change (NA)Remove the Nashorn JavaScript Engine
JEP 373ReleaseNot Applicable - Not a language specification change (NA)Reimplement the Legacy DatagramSocket API
JEP 374ReleaseNot Applicable - Not a language specification change (NA)Disable and Deprecate Biased Locking
JEP 377ReleaseNot Applicable - Not a language specification change (NA)ZGC: A Scalable Low-Latency Garbage Collector
JEP 379ReleaseNot Applicable - Not a language specification change (NA)Shenandoah: A Low-Pause-Time Garbage Collector
JEP 381ReleaseNot Applicable - Not a language specification change (NA)Remove the Solaris and SPARC Ports
JEP 383IncubatorNot Applicable - Not a language specification change (NA)Foreign-Memory Access API (Second Incubator)
JEP 385ReleaseNot Applicable - Not a language specification change (NA)Deprecate RMI Activation for Removal
  • JEP384 - The behaviour of records changed between preview/2nd preview/release. Unless otherwise stated, the JavaParser implementation follows the released behaviour. Additionally, note that “partial” support refers to javaparser-core being complete since 3.21.0, and javaparser-symbol-solver-core support is TBC.

JDK 16 (current) - March 2021

Source: https://openjdk.java.net/projects/jdk/16/

Note: Unless otherwise stated, the JavaParser implementations of features follows the released behaviour.

JEPStatusJavaParser SinceDescription
JEP 395ReleaseParser Support Since: v3.21.0
Released on: 11/April/2020, Solving TBC JEP395
Records
JEP 397ReleaseSealed Classes (Second Preview)
JEP 394ReleaseSupported Since: v3.18.0
Released on: 01/Dec/2020
Pattern Matching for instanceof
JEP 338ReleaseNot Applicable - Not a language specification change (NA)Vector API (Incubator)
JEP 347ReleaseNot Applicable - Not a language specification change (NA)Enable C++14 Language Features
JEP 357ReleaseNot Applicable - Not a language specification change (NA)Migrate from Mercurial to Git
JEP 369ReleaseNot Applicable - Not a language specification change (NA)Migrate to GitHub
JEP 376ReleaseNot Applicable - Not a language specification change (NA)ZGC: Concurrent Thread-Stack Processing
JEP 380ReleaseNot Applicable - Not a language specification change (NA)Unix-Domain Socket Channels
JEP 386ReleaseNot Applicable - Not a language specification change (NA)Alpine Linux Port
JEP 387ReleaseNot Applicable - Not a language specification change (NA)Elastic Metaspace
JEP 388ReleaseNot Applicable - Not a language specification change (NA)Windows/AArch64 Port
JEP 389IncubatorNot Applicable - Not a language specification change (NA)Foreign Linker API (Incubator)
JEP 390ReleaseNot Applicable - Not a language specification change (NA)Warnings for Value-Based Classes
JEP 392ReleaseNot Applicable - Not a language specification change (NA)Packaging Tool
JEP 393ReleaseNot Applicable - Not a language specification change (NA)Foreign-Memory Access API (Third Incubator)
JEP 396ReleaseNot Applicable - Not a language specification change (NA)Strongly Encapsulate JDK Internals by Default
  • JEP395 - The behaviour of records changed between preview/2nd preview/release. Unless otherwise stated, the JavaParser implementation follows the released behaviour. Additionally, note that “partial” support refers to javaparser-core being complete since 3.21.0, and javaparser-symbol-solver-core support is TBC.

JDK 17 - targeted for September 2021

Source: https://openjdk.java.net/projects/jdk/17/

Schedule (proposed)

2021/06/10 Rampdown Phase One (fork from main line) 2021/07/15 Rampdown Phase Two 2021/08/05 Initial Release Candidate 2021/08/19 Final Release Candidate 2021/09/14 General Availability

Features

JEPs targeted to JDK 17, so far 356: Enhanced Pseudo-Random Number Generators 2021/02/04 382: New macOS Rendering Pipeline 2021/03/04 391: macOS/AArch64 Port 2021/03/23 398: Deprecate the Applet API for Removal 2021/03/23