Blame SOURCES/NEWS

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