Skip to content

Java Features

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 286Release**Supported Since: v3.5.15
Released on:
25/Feb/2018**Local-Variable Type Inference
JEP 296Release~~_Not Applicable - Not a language specification
change (NA)_~~Consolidate the JDK Forest into a Single Repository
JEP 304Release~~_Not Applicable - Not a language specification
change (NA)_~~Garbage-Collector Interface
JEP 307Release~~_Not Applicable - Not a language specification
change (NA)_~~Parallel Full GC for G1
JEP 310Release~~_Not Applicable - Not a language specification
change (NA)_~~Application Class-Data Sharing
JEP 312Release~~_Not Applicable - Not a language specification
change (NA)_~~Thread-Local Handshakes
JEP 313Release~~_Not Applicable - Not a language specification
change (NA)_~~Remove the Native-Header Generation Tool (javah)
JEP 314Release~~_Not Applicable - Not a language specification
change (NA)_~~Additional Unicode Language-Tag Extensions
JEP 316Release~~_Not Applicable - Not a language specification
change (NA)_~~Heap Allocation on Alternative Memory Devices
JEP 317Experimental~~_Not Applicable - Not a language specification
change (NA)_~~Experimental Java-Based JIT Compiler
JEP 319Release~~_Not Applicable - Not a language specification
change (NA)_~~Root Certificates
JEP 322Release~~_Not 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 323Release**Supported Since: v3.xx.yy
Released on: dd/mmm/yyyy**Local-Variable Syntax for Lambda Parameters
JEP 327Release_Discussion
Needed JEP327__Unicode
10_
JEP 181Release_Discussion
Needed JEP181__Nest-Based Access
Control_
JEP 309Release~~_Not Applicable - Not a language
specification change (NA)_~~Dynamic Class-File Constants
JEP 315Release~~_Not Applicable - Not a language
specification change (NA)_~~Improve Aarch64 Intrinsics
JEP 318Release~~_Not Applicable - Not a language
specification change (NA)_~~Epsilon: A No-Op Garbage Collector
JEP 320Release~~_Not Applicable - Not a language change (
NA) JEP320_~~~~Remove the Java EE and CORBA
Modules~~
JEP 321Release~~_Not Applicable - Not a language
specification change (NA)_~~HTTP Client (Standard)
JEP 324Release~~_Not Applicable - Not a language
specification change (NA)_~~Key Agreement with Curve25519 and Curve448
JEP 328Release~~_Not Applicable - Not a language
specification change (NA)_~~Flight Recorder
JEP 329Release~~_Not Applicable - Not a language
specification change (NA)_~~ChaCha20 and Poly1305 Cryptographic Algorithms
JEP 330Release~~_Not Applicable - Not a language
specification change (NA)_~~Launch Single-File Source-Code Programs
JEP 331Release~~_Not Applicable - Not a language
specification change (NA)_~~Low-Overhead Heap Profiling
JEP 332Release~~_Not Applicable - Not a language
specification change (NA)_~~Transport Layer Security (TLS) 1.3
JEP 333Experimental~~_Not Applicable - Not a language
specification change (NA)_~~ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
JEP 335Release~~_Not Applicable - Not a language
specification change (NA)_~~Deprecate the Nashorn JavaScript Engine
JEP 336Release~~_Not 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 325Preview**Supported Since: v3.11.0
Released on:
03/Feb/2019**Switch Expressions (Preview)
JEP 189Experimental~~_Not Applicable - Not a language specification
change (NA)_~~Shenandoah: A Low-Pause-Time Garbage Collector (Experimental)
JEP 230Release~~_Not Applicable - Not a language specification
change (NA)_~~Microbenchmark Suite
JEP 334Release~~_Not Applicable - Not a language specification
change (NA)_~~JVM Constants API
JEP 340Release~~_Not Applicable - Not a language specification
change (NA)_~~One AArch64 Port, Not Two
JEP 341Release~~_Not Applicable - Not a language specification
change (NA)_~~Default CDS Archives
JEP 344Release~~_Not Applicable - Not a language specification
change (NA)_~~Abortable Mixed Collections for G1
JEP 346Release~~_Not 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 354Preview**Supported Since: v3.11.0
Released on:
03/Feb/2019**Switch Expressions (Preview)
JEP 355Preview**Supported Since: v3.14.0
Released on:
05/May/2019**Text Blocks (Preview)
JEP 350Release~~_Not Applicable - Not a language specification
change (NA)_~~Dynamic CDS Archives
JEP 351Release~~_Not Applicable - Not a language specification
change (NA)_~~ZGC: Uncommit Unused Memory
JEP 353Release~~_Not 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 361Release**Supported Since:
v3.xx.yy
Released on: dd/mmm/yyyy**
**Switch Expressions (
Standard)**
JEP 3682nd Preview**Supported Since:
v3.14.0
Released on: 05/May/2019**
**Text Blocks (Second
Preview)**
JEP 305**_
Preview_****Supported Since: v3.18.0
Released on:
01/Dec/2020**Pattern Matching for instanceof (Preview)
JEP 359Preview**Partial Support Since: v3.22.0
Released on:
11/May/2021 JEP343****Records (
Preview)**
JEP 343Incubator~~_Not Applicable (
NA)JEP343_~~~~Packaging Tool (
Incubator)~~
JEP 345Release~~_Not Applicable - Not a
language specification change (NA)_~~~~NUMA-Aware Memory Allocation for
G1~~
JEP 349Release~~_Not Applicable - Not a
language specification change (NA)_~~~~JFR Event
Streaming~~
JEP 352Release~~_Not Applicable - Not a
language specification change (NA)_~~~~Non-Volatile Mapped Byte
Buffers~~
JEP 358Release~~_Not Applicable - Not a
language specification change (NA)_~~~~Helpful
NullPointerExceptions~~
JEP 362Release~~_Not Applicable - Not a
language specification change (NA)_~~~~Deprecate the Solaris and SPARC
Ports~~
JEP 363Release~~_Not Applicable - Not a
language specification change (NA)_~~~~Remove the Concurrent Mark Sweep (CMS) Garbage
Collector~~
JEP 364Release~~_Not Applicable - Not a
language specification change (NA)_~~~~ZGC on
macOS~~
JEP 365Release~~_Not Applicable - Not a
language specification change (NA)_~~~~ZGC on
Windows~~
JEP 366Release~~_Not Applicable - Not a
language specification change (NA)_~~~~Deprecate the ParallelScavenge + SerialOld GC
Combination~~
JEP 367Release~~_Not Applicable - Not a
language specification change (NA)_~~~~Remove the Pack200 Tools and
API~~
JEP 370Release~~_Not 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 378**_
Release_****Supported Since: v3.14.0
Released on:
05/May/2019**Text Blocks
JEP 384Release**Partial Support Since: v3.22.0
Released on:
11/May/2021 JEP384****Records (Second
Preview)**
JEP 375**_
Release_****Supported Since: v3.18.0
Released on:
01/Dec/2020**Pattern Matching for instanceof (Second Preview)
JEP 360**_
Preview_****Sealed Classes (
Preview)**
JEP 339**_
Release_**~~_Not Applicable - Not a language specification
change (NA)_~~Edwards-Curve Digital Signature Algorithm (EdDSA)
JEP 371Release~~_Not Applicable - Not a
language specification change (NA)_~~~~Hidden
Classes~~
JEP 372Release~~_Not Applicable - Not a
language specification change (NA)_~~~~Remove the Nashorn JavaScript
Engine~~
JEP 373Release~~_Not Applicable - Not a
language specification change (NA)_~~~~Reimplement the Legacy DatagramSocket
API~~
JEP 374Release~~_Not Applicable - Not a
language specification change (NA)_~~~~Disable and Deprecate Biased
Locking~~
JEP 377Release~~_Not Applicable - Not a
language specification change (NA)_~~~~ZGC: A Scalable Low-Latency Garbage
Collector~~
JEP 379Release~~_Not Applicable - Not a
language specification change (NA)_~~~~Shenandoah: A Low-Pause-Time Garbage
Collector~~
JEP 381Release~~_Not Applicable - Not a
language specification change (NA)_~~~~Remove the Solaris and SPARC
Ports~~
JEP 383Incubator~~_Not Applicable - Not a
language specification change (NA)_~~~~Foreign-Memory Access API (Second
Incubator)~~
JEP 385Release~~_Not 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 - 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 395Release**Parser Support Since: v3.22.0
Released on:
11/May/2021, Solving TBC JEP395****
Records**
JEP 394**_
Release_****Supported Since: v3.18.0
Released on:
01/Dec/2020**Pattern Matching for instanceof
JEP 397**2nd
Preview****Sealed Classes (Second
Preview)**
JEP 338**_
Release_**~~_Not Applicable - Not a language specification
change (NA)_~~Vector API (Incubator)
JEP 347Release~~_Not Applicable -
Not a language specification change (NA)_~~~~Enable C++14 Language
Features~~
JEP 357Release~~_Not Applicable -
Not a language specification change (NA)_~~~~Migrate from Mercurial to
Git~~
JEP 369Release~~_Not Applicable -
Not a language specification change (NA)_~~~~Migrate to
GitHub~~
JEP 376Release~~_Not Applicable -
Not a language specification change (NA)_~~~~ZGC: Concurrent Thread-Stack
Processing~~
JEP 380Release~~_Not Applicable -
Not a language specification change (NA)_~~~~Unix-Domain Socket
Channels~~
JEP 386Release~~_Not Applicable -
Not a language specification change (NA)_~~~~Alpine Linux
Port~~
JEP 387Release~~_Not Applicable -
Not a language specification change (NA)_~~~~Elastic
Metaspace~~
JEP 388Release~~_Not Applicable -
Not a language specification change (NA)_~~~~Windows/AArch64
Port~~
JEP 389Incubator~~_Not Applicable -
Not a language specification change (NA)_~~~~Foreign Linker API (
Incubator)~~
JEP 390Release~~_Not Applicable -
Not a language specification change (NA)_~~~~Warnings for Value-Based
Classes~~
JEP 392Release~~_Not Applicable -
Not a language specification change (NA)_~~~~Packaging
Tool~~
JEP 393Release~~_Not Applicable -
Not a language specification change (NA)_~~~~Foreign-Memory Access API (Third
Incubator)~~
JEP 396Release~~_Not 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 - September 2021

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

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

JEPStatusJavaParser SinceDescription
JEP 306**_
Release_**Restore Always-Strict Floating-Point Semantics
JEP 409**_
Release_**Sealed Classes
JEP 406**_
Preview_**Pattern Matching for switch (Preview)
JEP 356Release~~_Not Applicable - Not a language specification
change (NA)_~~Enhanced Pseudo-Random Number Generators
JEP 382Release~~_Not Applicable - Not a language specification
change (NA)_~~New macOS Rendering Pipeline
JEP 391Release~~_Not Applicable - Not a language specification
change (NA)_~~macOS/AArch64 Port
JEP 398Release~~_Not Applicable - Not a language specification
change (NA)_~~Deprecate the Applet API for Removal
JEP 403Release~~_Not Applicable - Not a language specification
change (NA)_~~Strongly Encapsulate JDK Internals
JEP 407Release~~_Not Applicable - Not a language specification
change (NA)_~~Remove RMI Activation
JEP 410Release~~_Not Applicable - Not a language specification
change (NA)_~~Remove the Experimental AOT and JIT Compiler
JEP 411Release~~_Not Applicable - Not a language specification
change (NA)_~~Deprecate the Security Manager for Removal
JEP 412Incubator~~_Not Applicable - Not a language specification
change (NA)_~~Foreign Function & Memory API (Incubator)
JEP 4142nd Incubator~~_Not Applicable - Not a language specification
change (NA)_~~Vector API (Second Incubator)
JEP 415Release~~_Not Applicable - Not a language specification
change (NA)_~~Context-Specific Deserialization Filters

JDK 18 - March 2022

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

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

Schedule

2021/12/09 		Rampdown Phase One (fork from main line)
2022/01/20 		Rampdown Phase Two
2022/02/10 		Initial Release Candidate
2022/02/24 		Final Release Candidate
2022/03/22 		General Availability

Features

|                     JEP                      |       Status        |                        JavaParser Since                         | Description                                      |

|:——————————————–:|:——————-:|: —————————————————————:|————————————————–| | JEP 413 | Release | | Code Snippets in Java API Documentation | | JEP 420 | Preview | | Pattern Matching for switch (Second Preview) | | JEP 400 | Release | Not Applicable - Not a language specification change (NA) | UTF-8 by Default | | JEP 408 | Release | Not Applicable - Not a language specification change (NA) | Simple Web Server | | JEP 416 | Release | Not Applicable - Not a language specification change (NA) | Reimplement Core Reflection with Method Handles | | JEP 417 | 3rd Incubator | Not Applicable - Not a language specification change (NA) | Vector API (Third Incubator) | | JEP 418 | Release | Not Applicable - Not a language specification change (NA) | Internet-Address Resolution SPI | | JEP 419 | 2nd Incubator | Not Applicable - Not a language specification change (NA) | Foreign Function & Memory API (Second Incubator) | | JEP 421 | Release | Not Applicable - Not a language specification change (NA) | Deprecate Finalization for Removal |

JDK 19 - targeted for September 2022

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

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

Features

JEPs targeted to JDK 19, so far
422: 	Linux/RISC-V Port

Last update: 2022/3/18 16:38 UTC