What is new in Java 17 ?
3 minute read

Introduction

This is an alive post of what will become Java 17, and, as expected, this post will expand and change over time, until the development of Java 17 is frozen in 2021. I am planning to update this post when a new feature (JEP) is targeted for JDK 17, or when there is an important update on an already targeted JEP.

If something is implemented in an incubator module, it is not a permanent feature and it is released to get feedback from developers. API in such a module may change or completely removed (not released in any future JDK release). You need to use --add-modules to use incubator modules.

If something is a preview feature, it is fully specified and implemented, but provided in a release to gather feedback, so it is not a permanent change yet. You need to use --enable-preview to use such features.

Changes

  • 2021/03/21: First post.

Java 17 Features

The list is taken from the OpenJDK JDK 17 project page.

JEP 356: Enhanced Pseudo-Random Number Generators

This JEP will make it easy to use custom PRNG algorithms and provide a few concrete PRNG implementations.

It is difficult at the moment to have a custom PRNG implementation that can easily replace java.util.Random, because it is not an interface. This JEP will introduce a new interface called RandomGenerator, and also four specialized sub-interfaces.

This JEP will add six splittable (LXM family) and two other (Xoshiro256Plus and Xoroshiro128Plus) PRNG algorithm implementations.

JEP 382: New macOS Rendering Pipeline

This JEP will change Java 2D internal rendering pipeline from OpenGL to Apple Metal API. This is going to be an internal change with no visible change on any APIs.

JEP 391: macOS/AArch64 Port

This JEP aims to port JDK to run on AArch64 platforms on macOS (e.g. Apple M1 processors) natively without using the Rosetta 2 translator.

JEP 398: Deprecate the Applet API for Removal

Applet API is going to be removed so it is going to marked as deprecated.

JEP 410: Remove the Experimental AOT and JIT Compiler

The experimental AOT and JIT compilers using Graal compiler is going to be removed.

JEP 412: Foreign Function & Memory API (Incubator)

This is the continuation of the work started with JEP 370 and JEP 383 for Foreign Memory access, and JEP 389 Foreign Linker API. It provides a way to work on memory out of Java runtime (thus out of garbage collection) and provides an alternative to JNI.

JEP 414: Vector API (Second incubator)

This is the second iteration of Vector API introduced as JEP 338 in Java 16.


Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.