What's new in Java 17 (Changes in JDK 12, 13, 14, 15, 16, 17)

Updated: 2020-12-29

Java 17 is the next LTS version after Java 11. This page summarizes the changes from JDK 12 to JDK 17.

Spec / Language

Core Libs

  • JEP-352 Non-Volatile Mapped Byte Buffers, JDK 14\
  • JEP-372: Remove the Nashorn JavaScript Engine, JDK 15
  • JEP-353: Reimplement the Legacy Socket API
  • JEP-373: Reimplement the Legacy DatagramSocket API
  • JEP-385: Deprecate RMI Activation for Removal, JDK 15
  • JEP-380: Unix-Domain Socket Channels, JDK 16

Hotspot / Garbage Collection

Updates to G1 and ZGC; introducing Shenandoah

  • ZGC

    • JEP-351: ZGC: Uncommit Unused Memory, JDK 13
    • JEP-377: ZGC: A Scalable Low-Latency Garbage Collector, JDK 15
    • JEP-376: ZGC: Concurrent Thread-Stack Processing, JDK 16
    • JEP-364: ZGC on macOS, JDK 14
    • JEP-365: ZGC on Windows, JDK 14
  • Shenandoah: A Low-Pause-Time Garbage Collector

  • G1

    • JEP-345: NUMA-Aware Memory Allocation for G1, JDK 14
    • JEP-344: Abortable Mixed Collections for G1, JDK 12
    • JEP-346: Promptly Return Unused Committed Memory from G1, JDK 12

Deprecated and removed:

  • JEP-366: Deprecate the ParallelScavenge + SerialOld GC Combination, JDK 14
  • JEP-363: Remove the Concurrent Mark Sweep (CMS) Garbage Collector, JDK 14

Hotspot / Runtime

  • JEP 358: Helpful NullPointerExceptions, JDK 14

    • Improve the usability of NullPointerExceptions generated by the JVM by describing precisely which variable was null.
  • JEP-374: Disable and Deprecate Biased Locking

Class data-sharing (CDS) archive

  • JEP-341 Default CDS Archives, JDK 12

    • Enhance the JDK build process to generate a class data-sharing (CDS) archive, using the default class list, on 64-bit platforms. Improve out-of-the-box startup time.
  • JEP-350 Dynamic CDS Archives, JDK 13

Ports

  • JEP-386: Alpine Linux Port
  • JEP-388: Windows/AArch64 Port

Deprecated and removed:

  • JEP-362: Deprecate the Solaris and SPARC Ports, JDK 14
  • JEP-381: Remove the Solaris and SPARC Ports
  • JEP-340: One AArch64 Port, Not Two

Tools

  • JEP-367: Remove the Pack200 Tools and API, JDK 14
  • Packaging tool: Developers can use jlink to strip the JDK down to the minimal set of modules that are needed, and then use the packaging tool to produce a compressed, installable image that can be deployed to target machines. (e.g. .exe on Windows)

    • JEP-343 Incubator, JDK 14
    • JEP-392 Final, JDK 16

Project Panama: Interconnecting JVM and native code

“foreign” APIs: non-Java API

  • Foreign-Memory Access API

  • Foreign Linker API

  • Vector API: "to express vector computations that reliably compile at runtime to optimal vector hardware instructions on supported CPU architectures and thus achieve superior performance to equivalent scalar computations."

Misc

  • C++14 features are enabled from Java 16
  • Source code is migrated from hg to git and the repo is moved to GitHub
  • JEP-396: Strongly Encapsulate JDK Internals by Default
  • JEP-230: Microbenchmark Suite
  • JEP-334: JVM Constants API
  • JEP-339: Edwards-Curve Digital Signature Algorithm (EdDSA), JDK 15
  • JEP-390: Warnings for Value-Based Classes
  • JEP-349: JFR Event Streaming, JDK 14

    • JFR: Java Flight Recorder. The HotSpot VM emits more than 500 data points using JFR.