529 lines
18 KiB
Plaintext
529 lines
18 KiB
Plaintext
|
Key:
|
||
|
|
||
|
JDK-X - https://bugs.openjdk.java.net/browse/JDK-X
|
||
|
CVE-XXXX-YYYY: https://cve.mitre.org/cgi-bin/cvename.cgi?name=XXXX-YYYY
|
||
|
|
||
|
New in release OpenJDK 17.0.0 (2021-09-14):
|
||
|
===========================================
|
||
|
The full list of changes in the interim releases from 11u to 17u can be found at:
|
||
|
* https://builds.shipilev.net/backports-monitor/release-notes-12.txt
|
||
|
* https://builds.shipilev.net/backports-monitor/release-notes-13.txt
|
||
|
* https://builds.shipilev.net/backports-monitor/release-notes-14.txt
|
||
|
* https://builds.shipilev.net/backports-monitor/release-notes-15.txt
|
||
|
* https://builds.shipilev.net/backports-monitor/release-notes-16.txt
|
||
|
* https://builds.shipilev.net/backports-monitor/release-notes-17.txt
|
||
|
|
||
|
Major changes are listed below. Some changes may have been backported
|
||
|
to earlier releases following their first appearance in OpenJDK 12
|
||
|
through to 17.
|
||
|
|
||
|
NEW FEATURES
|
||
|
============
|
||
|
|
||
|
Language Features
|
||
|
=================
|
||
|
|
||
|
Switch Expressions
|
||
|
==================
|
||
|
https://openjdk.java.net/jeps/325
|
||
|
https://openjdk.java.net/jeps/354
|
||
|
https://openjdk.java.net/jeps/361
|
||
|
|
||
|
Extend the `switch` statement so that it can be used as either a
|
||
|
statement or an expression, and that both forms can use either a
|
||
|
"traditional" or "simplified" scoping and control flow behavior. Both
|
||
|
forms can use either traditional `case ... :` labels (with fall
|
||
|
through) or new `case ... ->` labels (with no fall through), with a
|
||
|
further new statement for yielding a value from a `switch`
|
||
|
expression. These changes will simplify everyday coding, and also
|
||
|
prepare the way for the use of pattern matching in `switch`.
|
||
|
|
||
|
This was a preview feature (http://openjdk.java.net/jeps/12) in
|
||
|
OpenJDK 12 & 13 and became final in OpenJDK 14.
|
||
|
|
||
|
Text Blocks
|
||
|
===========
|
||
|
https://openjdk.java.net/jeps/355
|
||
|
https://openjdk.java.net/jeps/368
|
||
|
https://openjdk.java.net/jeps/378
|
||
|
|
||
|
Add text blocks to the Java language. A text block is a multi-line
|
||
|
string literal that avoids the need for most escape sequences,
|
||
|
automatically formats the string in a predictable way, and gives the
|
||
|
developer control over format when desired.
|
||
|
|
||
|
This was a preview feature (http://openjdk.java.net/jeps/12) in
|
||
|
OpenJDK 13 & 14 and became final in OpenJDK 15.
|
||
|
|
||
|
Pattern Matching for instanceof
|
||
|
===============================
|
||
|
https://openjdk.java.net/jeps/305
|
||
|
https://openjdk.java.net/jeps/375
|
||
|
https://openjdk.java.net/jeps/394
|
||
|
http://cr.openjdk.java.net/~briangoetz/amber/pattern-match.html
|
||
|
|
||
|
Enhance the Java programming language with pattern matching for the
|
||
|
`instanceof` operator. Pattern matching allows common logic in a
|
||
|
program, namely the conditional extraction of components from objects,
|
||
|
to be expressed more concisely and safely.
|
||
|
|
||
|
This was a preview feature (http://openjdk.java.net/jeps/12) in
|
||
|
OpenJDK 14 & 15 and became final in OpenJDK 16.
|
||
|
|
||
|
Records
|
||
|
=======
|
||
|
https://openjdk.java.net/jeps/359
|
||
|
https://openjdk.java.net/jeps/384
|
||
|
https://openjdk.java.net/jeps/395
|
||
|
|
||
|
Enhance the Java programming language with records. Records provide a
|
||
|
compact syntax for declaring classes which are transparent holders for
|
||
|
shallowly immutable data.
|
||
|
|
||
|
This was a preview feature (http://openjdk.java.net/jeps/12) in
|
||
|
OpenJDK 14 & 15 and became final in OpenJDK 16.
|
||
|
|
||
|
Sealed Classes
|
||
|
==============
|
||
|
https://openjdk.java.net/jeps/360
|
||
|
https://openjdk.java.net/jeps/397
|
||
|
https://openjdk.java.net/jeps/409
|
||
|
https://cr.openjdk.java.net/~briangoetz/amber/datum.html
|
||
|
|
||
|
Enhance the Java programming language with sealed classes and
|
||
|
interfaces. Sealed classes and interfaces restrict which other classes
|
||
|
or interfaces may extend or implement them.
|
||
|
|
||
|
This was a preview feature (http://openjdk.java.net/jeps/12) in
|
||
|
OpenJDK 15 & 16 and became final in OpenJDK 17.
|
||
|
|
||
|
Restore Always-Strict Floating-Point Semantics
|
||
|
==============================================
|
||
|
https://openjdk.java.net/jeps/306
|
||
|
|
||
|
Make floating-point operations consistently strict, rather than have
|
||
|
both strict floating-point semantics (`strictfp`) and subtly different
|
||
|
default floating-point semantics. This will restore the original
|
||
|
floating-point semantics to the language and VM, matching the
|
||
|
semantics before the introduction of strict and default floating-point
|
||
|
modes in Java SE 1.2.
|
||
|
|
||
|
Pattern Matching for switch
|
||
|
===========================
|
||
|
https://openjdk.java.net/jeps/406
|
||
|
|
||
|
Enhance the Java programming language with pattern matching for
|
||
|
`switch` expressions and statements, along with extensions to the
|
||
|
language of patterns. Extending pattern matching to `switch` allows an
|
||
|
expression to be tested against a number of patterns, each with a
|
||
|
specific action, so that complex data-oriented queries can be
|
||
|
expressed concisely and safely.
|
||
|
|
||
|
This is a preview feature (http://openjdk.java.net/jeps/12) in OpenJDK
|
||
|
17.
|
||
|
|
||
|
Library Features
|
||
|
================
|
||
|
|
||
|
JVM Constants API
|
||
|
=================
|
||
|
https://openjdk.java.net/jeps/334
|
||
|
|
||
|
Introduce an API to model nominal descriptions of key class-file and
|
||
|
run-time artifacts, in particular constants that are loadable from the
|
||
|
constant pool.
|
||
|
|
||
|
Reimplement the Legacy Socket API
|
||
|
=================================
|
||
|
https://openjdk.java.net/jeps/353
|
||
|
|
||
|
Replace the underlying implementation used by the `java.net.Socket`
|
||
|
and `java.net.ServerSocket` APIs with a simpler and more modern
|
||
|
implementation that is easy to maintain and debug. The new
|
||
|
implementation will be easy to adapt to work with user-mode threads,
|
||
|
a.k.a. fibers, currently being explored in Project Loom
|
||
|
(https://openjdk.java.net/projects/loom).
|
||
|
|
||
|
JFR Event Streaming
|
||
|
===================
|
||
|
https://openjdk.java.net/jeps/349
|
||
|
|
||
|
Expose JDK Flight Recorder data for continuous monitoring.
|
||
|
|
||
|
Non-Volatile Mapped Byte Buffers
|
||
|
================================
|
||
|
https://openjdk.java.net/jeps/352
|
||
|
|
||
|
Add new JDK-specific file mapping modes so that the `FileChannel` API
|
||
|
can be used to create `MappedByteBuffer` instances that refer to
|
||
|
non-volatile memory.
|
||
|
|
||
|
Helpful NullPointerExceptions
|
||
|
=============================
|
||
|
https://openjdk.java.net/jeps/358
|
||
|
|
||
|
Improve the usability of `NullPointerException`s generated by the JVM
|
||
|
by describing precisely which variable was `null`.
|
||
|
|
||
|
Foreign-Memory Access API
|
||
|
=========================
|
||
|
https://openjdk.java.net/jeps/370
|
||
|
https://openjdk.java.net/jeps/383
|
||
|
https://openjdk.java.net/jeps/393
|
||
|
|
||
|
Introduce an API to allow Java programs to safely and efficiently
|
||
|
access foreign memory outside of the Java heap.
|
||
|
|
||
|
This was a incubation feature (https://openjdk.java.net/jeps/11) in
|
||
|
OpenJDK 14, 15 & 16, now superseded by the Foreign Function & Memory
|
||
|
API in OpenJDK 17 (see below).
|
||
|
|
||
|
Edwards-Curve Digital Signature Algorithm (EdDSA)
|
||
|
=================================================
|
||
|
https://openjdk.java.net/jeps/339
|
||
|
|
||
|
Implement cryptographic signatures using the Edwards-Curve Digital
|
||
|
Signature Algorithm (EdDSA) as described by RFC 8032
|
||
|
(https://tools.ietf.org/html/rfc8032).
|
||
|
|
||
|
Hidden Classes
|
||
|
==============
|
||
|
https://openjdk.java.net/jeps/371
|
||
|
|
||
|
Introduce hidden classes, which are classes that cannot be used
|
||
|
directly by the bytecode of other classes. Hidden classes are intended
|
||
|
for use by frameworks that generate classes at run time and use them
|
||
|
indirectly, via reflection. A hidden class may be defined as a member
|
||
|
of an access control nest (https://openjdk.java.net/jeps/181), and may
|
||
|
be unloaded independently of other classes.
|
||
|
|
||
|
Reimplement the Legacy DatagramSocket API
|
||
|
=========================================
|
||
|
https://openjdk.java.net/jeps/373
|
||
|
|
||
|
Replace the underlying implementations of the
|
||
|
`java.net.DatagramSocket` and `java.net.MulticastSocket` APIs with
|
||
|
simpler and more modern implementations that are easy to maintain and
|
||
|
debug. The new implementations will be easy to adapt to work with
|
||
|
virtual threads, currently being explored in Project Loom
|
||
|
(https://openjdk.java.net/projects/loom). This is a follow-on to JEP
|
||
|
353 (see above), which already reimplemented the legacy Socket API.
|
||
|
|
||
|
Vector API
|
||
|
==========
|
||
|
https://openjdk.java.net/jeps/338
|
||
|
https://openjdk.java.net/jeps/414
|
||
|
|
||
|
Provide an initial iteration of an incubator module,
|
||
|
`jdk.incubator.vector`, 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.
|
||
|
|
||
|
This is an incubation feature (https://openjdk.java.net/jeps/11)
|
||
|
introduced in OpenJDK 16.
|
||
|
|
||
|
Unix-Domain Socket Channels
|
||
|
===========================
|
||
|
https://openjdk.java.net/jeps/380
|
||
|
|
||
|
Add Unix-domain (`AF_UNIX`) socket support to the socket channel and
|
||
|
server-socket channel APIs in the `java.nio.channels` package. Extend
|
||
|
the inherited channel mechanism to support Unix-domain socket channels
|
||
|
and server socket channels.
|
||
|
|
||
|
Foreign Linker API (Incubator)
|
||
|
==============================
|
||
|
https://openjdk.java.net/jeps/389
|
||
|
|
||
|
Introduce an API that offers statically-typed, pure-Java access to
|
||
|
native code. This API, together with the Foreign-Memory API (see
|
||
|
above), will considerably simplify the otherwise error-prone process
|
||
|
of binding to a native library.
|
||
|
|
||
|
This was an incubation feature (https://openjdk.java.net/jeps/11)
|
||
|
introduced in OpenJDK 16, now superseded by the Foreign Function &
|
||
|
Memory API in OpenJDK 17 (see below).
|
||
|
|
||
|
Strongly Encapsulate JDK Internals by Default
|
||
|
=============================================
|
||
|
https://openjdk.java.net/jeps/396
|
||
|
https://openjdk.java.net/jeps/403
|
||
|
|
||
|
Strongly encapsulate all internal elements of the JDK by default,
|
||
|
except for critical internal APIs such as `sun.misc.Unsafe`. It will
|
||
|
no longer be possible to relax the strong encapsulation of internal
|
||
|
elements via a single command-line option, as was possible in OpenJDK
|
||
|
9 through 16.
|
||
|
|
||
|
Enhanced Pseudo-Random Number Generators
|
||
|
========================================
|
||
|
https://openjdk.java.net/jeps/356
|
||
|
|
||
|
Provide new interface types and implementations for pseudo-random
|
||
|
number generators (PRNGs), including jumpable PRNGs and an additional
|
||
|
class of splittable PRNG algorithms (LXM).
|
||
|
|
||
|
Foreign Function & Memory API
|
||
|
=============================
|
||
|
https://openjdk.java.net/jeps/412
|
||
|
|
||
|
Introduce an API by which Java programs can interoperate with code and
|
||
|
data outside of the Java runtime. By efficiently invoking foreign
|
||
|
functions (i.e., code outside the JVM), and by safely accessing
|
||
|
foreign memory (i.e., memory not managed by the JVM), the API enables
|
||
|
Java programs to call native libraries and process native data without
|
||
|
the brittleness and danger of JNI.
|
||
|
|
||
|
This API is an incubation feature (https://openjdk.java.net/jeps/11)
|
||
|
introduced in OpenJDK 17, and is an evolution of the Foreign Memory
|
||
|
Access API (OpenJDK 14 through 16) and Foreign Linker API (OpenJDK
|
||
|
16) (see above).
|
||
|
|
||
|
Context-Specific Deserialization Filters
|
||
|
========================================
|
||
|
https://openjdk.java.net/jeps/415
|
||
|
|
||
|
Allow applications to configure context-specific and
|
||
|
dynamically-selected deserialization filters via a JVM-wide filter
|
||
|
factory that is invoked to select a filter for each individual
|
||
|
deserialization operation.
|
||
|
|
||
|
Tools
|
||
|
=====
|
||
|
|
||
|
Packaging Tool
|
||
|
==============
|
||
|
https://openjdk.java.net/jeps/343
|
||
|
https://openjdk.java.net/jeps/392
|
||
|
|
||
|
Provide the `jpackage` tool, for packaging self-contained Java
|
||
|
applications.
|
||
|
|
||
|
JVM Features
|
||
|
============
|
||
|
|
||
|
Shenandoah: A Low-Pause-Time Garbage Collector
|
||
|
==============================================
|
||
|
https://openjdk.java.net/jeps/189
|
||
|
https://openjdk.java.net/jeps/379
|
||
|
|
||
|
Add a new garbage collection (GC) algorithm named Shenandoah which
|
||
|
reduces GC pause times by doing evacuation work concurrently with the
|
||
|
running Java threads. Pause times with Shenandoah are independent of
|
||
|
heap size, meaning you will have the same consistent pause times
|
||
|
whether your heap is 200 MB or 200 GB.
|
||
|
|
||
|
Shenandoah has been provided in Red Hat builds of OpenJDK 8 since
|
||
|
8u131 in April 2017 and in all 11u builds.
|
||
|
|
||
|
Upstream, it was introduced in OpenJDK 12 as an experimental feature
|
||
|
and became a production feature in OpenJDK 15. It was backported to
|
||
|
OpenJDK 11 with the 11.0.9 release in October 2020.
|
||
|
|
||
|
Abortable Mixed Collections for G1
|
||
|
==================================
|
||
|
https://openjdk.java.net/jeps/344
|
||
|
|
||
|
Make G1 mixed collections abortable if they might exceed the pause
|
||
|
target.
|
||
|
|
||
|
Promptly Return Unused Committed Memory from G1
|
||
|
===============================================
|
||
|
https://openjdk.java.net/jeps/346
|
||
|
|
||
|
Enhance the G1 garbage collector to automatically return Java heap
|
||
|
memory to the operating system when idle.
|
||
|
|
||
|
Dynamic CDS Archives
|
||
|
====================
|
||
|
https://openjdk.java.net/jeps/310
|
||
|
https://openjdk.java.net/jeps/350
|
||
|
|
||
|
Extend application class-data sharing to allow the dynamic archiving
|
||
|
of classes at the end of Java application execution. The archived
|
||
|
classes will include all loaded application classes and library
|
||
|
classes that are not present in the default, base-layer CDS archive.
|
||
|
|
||
|
ZGC: Uncommit Unused Memory (Experimental)
|
||
|
==========================================
|
||
|
https://openjdk.java.net/jeps/351
|
||
|
|
||
|
Enhance ZGC to return unused heap memory to the operating system.
|
||
|
|
||
|
NUMA-Aware Memory Allocation for G1
|
||
|
===================================
|
||
|
https://openjdk.java.net/jeps/345
|
||
|
|
||
|
Improve G1 performance on large machines by implementing NUMA-aware
|
||
|
memory allocation.
|
||
|
|
||
|
ZGC on macOS (Experimental)
|
||
|
===========================
|
||
|
https://openjdk.java.net/jeps/364
|
||
|
|
||
|
Port the ZGC garbage collector to macOS.
|
||
|
|
||
|
ZGC on Windows (Experimental)
|
||
|
=============================
|
||
|
https://openjdk.java.net/jeps/365
|
||
|
|
||
|
Port the ZGC garbage collector to Windows.
|
||
|
|
||
|
ZGC: A Scalable Low-Latency Garbage Collector (Production)
|
||
|
==========================================================
|
||
|
https://openjdk.java.net/jeps/377
|
||
|
|
||
|
Change the Z Garbage Collector from an experimental feature into a
|
||
|
product feature.
|
||
|
|
||
|
ZGC: Concurrent Thread-Stack Processing
|
||
|
=======================================
|
||
|
https://openjdk.java.net/jeps/376
|
||
|
|
||
|
Move ZGC thread-stack processing from safepoints to a concurrent
|
||
|
phase.
|
||
|
|
||
|
Elastic Metaspace
|
||
|
=================
|
||
|
https://openjdk.java.net/jeps/387
|
||
|
|
||
|
Return unused HotSpot class-metadata (i.e., metaspace) memory to the
|
||
|
operating system more promptly, reduce metaspace footprint, and
|
||
|
simplify the metaspace code in order to reduce maintenance costs.
|
||
|
|
||
|
Ports
|
||
|
=====
|
||
|
|
||
|
Alpine Linux Port
|
||
|
=================
|
||
|
https://openjdk.java.net/jeps/386
|
||
|
|
||
|
Port the JDK to Alpine Linux, and to other Linux distributions that
|
||
|
use musl as their primary C library, on both the x64 and AArch64
|
||
|
architectures,
|
||
|
|
||
|
Windows/AArch64 Port
|
||
|
====================
|
||
|
https://openjdk.java.net/jeps/388
|
||
|
|
||
|
Port the JDK to Windows/AArch64.
|
||
|
|
||
|
New macOS Rendering Pipeline
|
||
|
============================
|
||
|
https://openjdk.java.net/jeps/382
|
||
|
|
||
|
Implement a Java 2D internal rendering pipeline for macOS using the
|
||
|
Apple Metal API as alternative to the existing pipeline, which uses
|
||
|
the deprecated Apple OpenGL API.
|
||
|
|
||
|
macOS/AArch64 Port
|
||
|
==================
|
||
|
https://openjdk.java.net/jeps/391
|
||
|
|
||
|
Port the JDK to macOS/AArch64.
|
||
|
|
||
|
DEPRECATIONS
|
||
|
============
|
||
|
|
||
|
Deprecate the ParallelScavenge + SerialOld GC Combination
|
||
|
=========================================================
|
||
|
https://openjdk.java.net/jeps/366
|
||
|
|
||
|
Deprecate the combination of the Parallel Scavenge and Serial Old
|
||
|
garbage collection algorithms.
|
||
|
|
||
|
Deprecate and Disable Biased Locking
|
||
|
====================================
|
||
|
https://openjdk.java.net/jeps/374
|
||
|
|
||
|
Disable biased locking by default, and deprecate all related
|
||
|
command-line options.
|
||
|
|
||
|
Warnings for Value-Based Classes
|
||
|
================================
|
||
|
https://openjdk.java.net/jeps/390
|
||
|
|
||
|
Designate the primitive wrapper classes as value-based and deprecate
|
||
|
their constructors for removal, prompting new deprecation
|
||
|
warnings. Provide warnings about improper attempts to synchronize on
|
||
|
instances of any value-based classes in the Java Platform.
|
||
|
|
||
|
Deprecate the Applet API for Removal
|
||
|
====================================
|
||
|
https://openjdk.java.net/jeps/398
|
||
|
|
||
|
Deprecate the Applet API for removal. It is essentially irrelevant
|
||
|
since all web-browser vendors have either removed support for Java
|
||
|
browser plug-ins or announced plans to do so.
|
||
|
|
||
|
Deprecate the Security Manager for Removal
|
||
|
==========================================
|
||
|
https://openjdk.java.net/jeps/411
|
||
|
|
||
|
Deprecate the Security Manager for removal in a future release. The
|
||
|
Security Manager dates from Java 1.0. It has not been the primary
|
||
|
means of securing client-side Java code for many years, and it has
|
||
|
rarely been used to secure server-side code. To move Java forward, we
|
||
|
intend to deprecate the Security Manager for removal in concert with
|
||
|
the legacy Applet API (see above). .
|
||
|
|
||
|
REMOVALS
|
||
|
========
|
||
|
|
||
|
Remove the Concurrent Mark Sweep (CMS) Garbage Collector
|
||
|
========================================================
|
||
|
https://openjdk.java.net/jeps/363
|
||
|
|
||
|
Remove the Concurrent Mark Sweep (CMS) garbage collector.
|
||
|
|
||
|
Remove the Pack200 Tools and API
|
||
|
================================
|
||
|
https://openjdk.java.net/jeps/336
|
||
|
https://openjdk.java.net/jeps/367
|
||
|
|
||
|
Remove the `pack200` and `unpack200` tools, and the `Pack200` API in
|
||
|
the `java.util.jar` package. These tools and API were deprecated for
|
||
|
removal in OpenJDK 11 with the express intent to remove them in a
|
||
|
future release.
|
||
|
|
||
|
Remove the Nashorn JavaScript Engine
|
||
|
====================================
|
||
|
https://openjdk.java.net/jeps/372
|
||
|
|
||
|
Remove the Nashorn JavaScript script engine and APIs, and the `jjs`
|
||
|
tool. The engine, the APIs, and the tool were deprecated for removal
|
||
|
in OpenJDK 11 with the express intent to remove them in a future
|
||
|
release.
|
||
|
|
||
|
Remove the Solaris and SPARC Ports
|
||
|
==================================
|
||
|
https://openjdk.java.net/jeps/362
|
||
|
https://openjdk.java.net/jeps/381
|
||
|
|
||
|
Remove the source code and build support for the Solaris/SPARC,
|
||
|
Solaris/x64, and Linux/SPARC ports. These ports were deprecated for
|
||
|
removal in OpenJDK 14 (JEP 362) and removed in OpenJDK 15 (JEP 381).
|
||
|
|
||
|
Remove RMI Activation
|
||
|
=====================
|
||
|
https://openjdk.java.net/jeps/385
|
||
|
https://openjdk.java.net/jeps/407
|
||
|
https://docs.oracle.com/en/java/javase/14/docs/specs/rmi/activation.html
|
||
|
|
||
|
Remove the Remote Method Invocation (RMI) Activation mechanism, while
|
||
|
preserving the rest of RMI. RMI Activation is an obsolete part of RMI
|
||
|
that has been optional since OpenJDK 8 and was deprecated in OpenJDK
|
||
|
15.
|
||
|
|
||
|
Remove the Experimental AOT and JIT Compiler
|
||
|
============================================
|
||
|
https://openjdk.java.net/jeps/410
|
||
|
|
||
|
Remove the experimental Java-based ahead-of-time (AOT) and
|
||
|
just-in-time (JIT) compiler. This compiler has seen little use since
|
||
|
its introduction and the effort required to maintain it is
|
||
|
significant. Retain the experimental Java-level JVM compiler
|
||
|
interface (JVMCI) so that developers can continue to use
|
||
|
externally-built versions of the compiler for JIT compilation.
|