Skip to content

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

License

Notifications You must be signed in to change notification settings

wesleyegberto/java-new-features

Repository files navigation

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