/java-new-features

Exploring Java 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24

Primary LanguageJavaApache License 2.0Apache-2.0

Java New Features

A project to explore more about the new features from Java 8 through Java 21.

JDK Release Notes

OpenJDK Projects

  • Valhalla: enhance Java object model with value objects and primitive values.
  • Loom: project to bring user-mode threads.

Resume by Version

  • Java 24

    • Generational Shenandoah (experimental)
    • Compact Object Headers (experimental)
    • Prepare to Restrict the Use of JNI
    • Late Barrier Expansion for G1
    • Key Derivation Function API (preview)
    • Remove the Windows 32-bit x86 Port
    • Ahead-of-Time Class Loading & Linking
    • Class-File API
    • Steam Gatherers
    • Permanently Disable the Security Manager
    • Scoped Values (preview 4)
    • Primitive Types in Patterns, instanceof, and switch (preview 2)
    • Vector API (incubator)
    • ZGC Remove the Non-Generational Mode
    • Synchronize Virtual Threads without Pinning
    • Flexible Constructor Bodies (preview 3)
    • Linking Run-Time Images without JMODs
    • Module Import Declarations (preview 2)
    • Simple Source Files and Instance Main Mathods (preview 4)
    • Quantum-Resistant Module-Lattice-Based Key Encapsulation Mechanism
    • Quantum-Resistant Module-Lattice-Based Digital Signature Algorithm
    • Warn Upon Use of Memory-Access Methods in sun.misc.Unsafe
    • Structured Concurrency (preview 4)
    • Deprecate the 32-bit x86 Port for Removal
  • Java 23 (Sep, 2024)

    • Primitive Types in Patterns, instanceof and switch (preview)
    • Class-File API (preview 2)
    • Markdown Documentation Comments
    • Vector API (incubator)
    • Stream Gatherers (preview 2)
    • Deprecate the Memory-Access Methods in Unsafe for Removal
    • ZGC Generational Mode by Default
    • Module Import Declarations (preview)
    • Implicitly Declared Classes and Instance Main Methods (preview 3)
    • Structured Concurrency (preview 3)
    • Scoped Value (preview 3)
    • Flexible Constructor Bodies (preview 2)
  • Java 22 (Mar, 2024)

    • Region Pinning for G1
    • Statements before super (preview)
    • FFM API (standard)
    • Unnamed Variable & Patterns
    • Class-File API (preview)
    • Launch Multi-File Source-Code Programs
    • String Templates (preview 2)
    • Vector API (incubator)
    • Stream Gatherers (preview)
    • Structured Concurrency (preview 2)
    • Scoped Value (preview 2)
    • Implicity Declared Classes and Instance Main Methods (preview 2)
  • Java 21 (LTS; Sep, 2023)

    • String Templates (preview)
    • Sequenced Collections
    • Generational ZGC
    • Record Pattern (standard) 🚀
    • Pattern Matching for switch (standard) 🚀
    • Foreign Function & memory API (preview 3)
    • Unnamed Patterns and Variables (preview)
    • Virtual Threads (standard) 🚀
    • Unnamed Classes and Instance Main Methods (preview)
    • Scoped Value (preview)
    • Vector API (incubator)
    • Deprecate the Windows 32-bit x86 Port for Removal
    • Prepare to Disallow the Dynamic Loading of Agents
    • KEM API
    • Structured Concurrency (preview)
  • Java 20 (Mar, 2023)

    • Scoped values (incubator)
    • Record pattern (preview 2)
    • Pattern matching for switch (preview 4)
    • Foreign Function & memory API (preview 2)
    • Virtual Threads (preview 2)
    • Structured concurrency (second incubator)
    • Vector API (incubator)
  • Java 19 (Sep, 2022)

    • Virtual Thread (preview) 🚀
    • Pattern matching for switch (preview 3)
    • Vector API (fourth incubator)
    • Record pattern (preview)
    • Structured concurrency (incubator)
  • Java 18 (Mar, 2022)

    • UTF-8 by Default
    • Simple Web Server
    • Code Snippets in Java API Documentation
    • Pattern matching for switch (preview 2)
    • Deprecated method finalize
  • Java 17 (LTS; Sep, 2021)

    • Restore Always-Strict Floating-Point Semantics
    • Enhanced Pseudo-Random Number Generator
    • New macOS rendering for Java 2D API
    • macOS/AArch64 Port
    • Deprecate the Applet API for Removal
    • Strongly Encapsulate JDK Internals
    • Pattern matching for switch (preview)
    • Remove RMI Activation
    • Sealed Classes (standard)
    • Remove the experimental AOT and JIT compiler
    • Deprecate the Security Manager for Removal
    • Foreign Function & Memory API (incubator)
    • Vector API (fourth incubator)
    • Context-Specific Deserialization Filters
  • Java 16 (Mar, 2021)

    • Records (standard)
    • Pattern matching for instanceof (standard)
    • Sealed classes (preview 2)
    • Unix-Domain Socket Channels
    • Warnings for Value-Based Classes
    • Foreign-Memory Access API (incubator)
    • Vector API (incubator)
    • Foreign Linker API (incubator)
    • Packaging Tool
  • Java 15 (Sep, 2020)

    • Sealed classes (preview)
    • Hidden classes
    • DatagramSocket reimplementation
    • Pattern matching for instanceof (preview 2)
    • Records (preview 2)
    • Foreign-Memory Access API (incubator)
    • GCs ZGC and Shenandoah turned final
  • Java 14 (Mar, 2020)

    • Switch expression (standard)
    • Pattern matching for instanceof (preview)
    • Text blocks improvements (preview 2)
    • Records (preview)
    • Helpful NullPointerExceptions
    • Packaging tool
    • JFR even streaming
  • Java 13 (Sep, 2019)

    • Switch expression (preview 2)
    • Text blocks (preview)
    • String API updates
    • NIO updates
    • Socket and ServerSocket reimplementation (Project Loom)
    • Dynamic CDS Archives
    • ZGC: Uncommit Unused Memory
  • Java 12 (Mar, 2019)

    • Switch expression (preview)
    • Compact Number Format
    • Collectors improvements
    • CompletableFuture improvements
    • CDS enable by default
    • New GC and improvements
  • Java 11 (LTS; Sep, 2018)

    • Removal of Java EE Modules, JavaFX and deprecated API
    • Http Client (incubator)
    • var in lambda expressions
    • API improvements
    • Null I/O
  • Java 10 (Mar, 2018)

    • Process API improvements
    • Collections improvements
    • Application Class-Data Sharing
    • var keyword to declare variables
  • Java 9 (Sep, 2017)

    • Milling Project Coin
    • Process API
    • Platform Logging API and Service
    • Concurrency improvements
    • Collections improvements
    • Project Jigsaw
    • Segmented code cache
    • JShell
    • much more (see JEPs)
  • Java 8 (Marc, 2014)

    • API
    • Stream API
    • Project Lambda
    • Repeating annotations

Running

Java and Javac

You will need to provide the flag to enable preview and the number of Java version:

java --enable-preview --source 21 SourceCode.java

javac --enable-preview --source 21 SourceCode.java

JShell

To use JShell you can use the following flag:

jshell --enable-preview

Maven

  • Maven: 3.5.0

    • compiler plugin: 3.8.0
    • surefire and failsafe: 2.22.0
    • plugins using ASM (e.g. the shade plugin) will likely need to be updated as well

    To run the examples with Maven use:

<plugin>
    <artifactId>maven-compiler-plugin</artifactId>
    <configuration>
        <release>${java.version}</release>
        <compilerArgs>--enable-preview</compilerArgs>
    </configuration>
</plugin>
<plugin>
    <artifactId>maven-surefire-plugin</artifactId>
    <configuration>
        <argLine>--enable-preview</argLine>
    </configuration>
</plugin>
<plugin>
    <artifactId>maven-failsafe-plugin</artifactId>
    <configuration>
        <argLine>--enable-preview</argLine>
    </configuration>
</plugin>

Helpful Links