Welcome to the final OpenJDK Quality Outreach update for 2022!
JDK 20, scheduled for General Availability on March 21 2023, is now
in Rampdown Phase One (RDP1) [1]. At this point, the overall JDK 20
[2] feature set is frozen (see below the final list of JEPs
integrated into JDK 20) and only low-risk enhancements might still be
considered. The coming weeks should be used to identify and resolve
as many issues as possible, i.e. before JDK 20 enters the Release
Candidates phase in early February 2023.
## JDK 20 Early-Access builds
The latest Early-Access (builds 27) are available [2] with the
Release Notes here [3]. Those builds are provided under the GNU GPL
v2, with the Classpath Exception.
### JEPs integrated into JDK 20:
JEP 429: Scoped Values (Incubator)
JEP 432: Record Patterns (2nd Preview)
JEP 433: Pattern Matching for switch (4th Preview)
JEP 434: Foreign Function & Memory API (2nd Preview)
JEP 436: Virtual Threads (2nd Preview)
JEP 437: Structured Concurrency (2nd Incubator)
[1] https://mail.openjdk.org/pipermail/jdk-dev/2022-December/007233.html
[2]
https://urldefense.com/v3/__https://jdk.java.net/20/__;!!ACWV5N9M2RV99hQ!OqdzOerVCrwa1pDUQisIwaR0A2LNK9SOsJuYn2zDbXx3jTrmzCEkj-23LGHp_Oveh2PZXokzY1AdUBFBB1uoTyiVEIUD$
[3]
https://urldefense.com/v3/__https://jdk.java.net/20/release-notes__;!!ACWV5N9M2RV99hQ!OqdzOerVCrwa1pDUQisIwaR0A2LNK9SOsJuYn2zDbXx3jTrmzCEkj-23LGHp_Oveh2PZXokzY1AdUBFBB1uoTzqxD5c4$
### Changes in recent JDK 20 builds that may be of interest:
#### Build 27:
- JDK-8297794: Deprecate JMX Management Applets for Removal
- JDK-8297118: Change IncompatibleClassChangeError to MatchException
for exhaustive switch statements and switch expressions
- JDK-8294047: HttpResponseInputStream swallows interrupts
- JDK-8281236: (D)TLS key exchange named groups
- JDK-8280798: com.sun.jdi.ObjectReference::setValue spec should
prohibit any final field modification
- JDK-8295350: JFR: Add stop methods for recording streams
- JDK-8295044: Implementation of Foreign Function and Memory API (2nd
Preview)
- JDK-8296896: Change virtual Thread.yield to use external submit
- JDK-8297804: (tz) Update Timezone Data to 2022g
- JDK-8295803: Console should be usable in jshell and other environments
- JDK-8286666: Implementation of Scoped Values (Incubator)
- JDK-8296672: Implementation of Virtual Threads (2nd Preview)
#### Build 26:
- JDK-8297276: Remove thread text from Subject.current
- JDK-8297030: Reduce Default Keep-Alive Timeout Value for httpclient
- JDK-8247645: ChaCha20 Intrinsics
#### Build 25:
- JDK-8296472: Remove ObjectLocker around
appendToClassPathForInstrumentation call
- JDK-8290313: Produce warning when user specified java.io.tmpdir
directory doesn't exist
- JDK-8288717: Add a means to close idle connections in HTTP/2
connection pool
- JDK-8288047: Accelerate Poly1305 on x86_64 using AVX512 instructions
- JDK-8059632: Method reference compilation uses incorrect qualifying
type
- JDK-8297161: Add additional Service Attributes to Standard
Algorithm Names guide
- JDK-8294073: Performance improvement for message digest
implementations
#### Build 24:
- JDK-8294731: Improve multiplicative inverse for secp256r1
implementation
- JDK-8296715: CLDR v42 update for tzdata 2022f
- JDK-8296958: [JVMCI] add API for retrieving ConstantValue attributes
#### Build 23:
- JDK-8296226: Add constructors (String,Throwable) and (Throwable) to
InvalidParameterException
- JDK-8295673: Deprecate and disable legacy parallel class loading
workaround for non-parallel-capable class loaders
- JDK-8294241: Deprecate URL public constructors
- JDK-8289689: (fs) Re-examine the need for normalization to Unicode
Normalization Format D (macOS)
- JDK-8279164: Disable TLS_ECDH_* cipher suites
- JDK-8178355: IdentityHashMap uses identity-based comparison for
values everywhere except remove(K,V) and replace(K,V,V)
- JDK-8296108: (tz) Update Timezone Data to 2022f
## Heads-up - JDK 21: First Early-Access Builds
When JDK 20 entered RDP1 [4], the JDK mainline [5] was (a) forked
into a JDK 20 stabilization repository [6], and (b) set to JDK 21. As
a consequence, the first JDK 21 Early-Access builds have been
published [7].
[4] https://mail.openjdk.org/pipermail/jdk-dev/2022-December/007233.html
[5]
https://urldefense.com/v3/__https://github.com/openjdk/jdk__;!!ACWV5N9M2RV99hQ!OqdzOerVCrwa1pDUQisIwaR0A2LNK9SOsJuYn2zDbXx3jTrmzCEkj-23LGHp_Oveh2PZXokzY1AdUBFBB1uoTwY8djft$
[6]
https://urldefense.com/v3/__https://github.com/openjdk/jdk20__;!!ACWV5N9M2RV99hQ!OqdzOerVCrwa1pDUQisIwaR0A2LNK9SOsJuYn2zDbXx3jTrmzCEkj-23LGHp_Oveh2PZXokzY1AdUBFBB1uoT4oRdAUK$
[7]
https://urldefense.com/v3/__https://jdk.java.net/21/__;!!ACWV5N9M2RV99hQ!OqdzOerVCrwa1pDUQisIwaR0A2LNK9SOsJuYn2zDbXx3jTrmzCEkj-23LGHp_Oveh2PZXokzY1AdUBFBB1uoT5lq0Ja0$
## Heads-up - Valhalla: LW4 Early-Access Builds
Valhalla LW4 early-access builds have been published [8], those
builds are primarily focused on implementing the Value Objects JEP
draft [9]. For additional details on those EA builds, make sure to
read these LW4 release notes [10]. For a more hands-on introduction
to Value Object, you can watch the latest JEP Café: Java Value
Objects in Action [11]. Interested developers are encouraged to
explore the performance and migration impact of value objects on
their applications, and to provide feedback to the valhalla-dev [12]
mailing list.
[8]
https://urldefense.com/v3/__https://jdk.java.net/valhalla/__;!!ACWV5N9M2RV99hQ!OqdzOerVCrwa1pDUQisIwaR0A2LNK9SOsJuYn2zDbXx3jTrmzCEkj-23LGHp_Oveh2PZXokzY1AdUBFBB1uoTyVj13HB$
[9] https://openjdk.org/jeps/8277163
[10] https://openjdk.org/projects/valhalla/early-access
[11]
https://urldefense.com/v3/__https://inside.java/2022/12/06/jepcafe15/__;!!ACWV5N9M2RV99hQ!OqdzOerVCrwa1pDUQisIwaR0A2LNK9SOsJuYn2zDbXx3jTrmzCEkj-23LGHp_Oveh2PZXokzY1AdUBFBB1uoTxkGx8mB$
[12] https://mail.openjdk.org/pipermail/valhalla-dev/
## Heads-up - Generational ZGC: New Early-Access Builds
New Generational ZGC [13] Early-Access Builds have been updated
recently [14]. These EA builds are provided under the GNU GPL v2,
with the Classpath Exception.
### Changes include :
- Rebased on top of jdk-20+21
- Added macOS builds
- Heuristics rewriten to deal with a problematic case where
Generational ZGC spent too much focus on doing young generation
collection when it’s more beneficial to spend resources to collect
the old generation.
- GC logging rewriten to easier see what log lines belong to what
collection / generation, plus many additional changes that should
make it easier to read and understand GC logs
- Barrier elision enhanced to remove barriers from array access of
newly allocated arrays
- Enhanced the generated hs_err crash text file
- Fixed and unified code quality and style
For more information, make sure to watch this Inside Java Newscast
[15] dedicated on Generational ZGC. Feedback should be sent to the
zgc-dev mailing list [16].
[13]
https://urldefense.com/v3/__https://jdk.java.net/genzgc/__;!!ACWV5N9M2RV99hQ!OqdzOerVCrwa1pDUQisIwaR0A2LNK9SOsJuYn2zDbXx3jTrmzCEkj-23LGHp_Oveh2PZXokzY1AdUBFBB1uoT7oZBrZj$
[14] https://bugs.openjdk.org/browse/JDK-8272979
[15]
https://urldefense.com/v3/__https://inside.java/2022/11/17/insidejava-newscast-037/__;!!ACWV5N9M2RV99hQ!OqdzOerVCrwa1pDUQisIwaR0A2LNK9SOsJuYn2zDbXx3jTrmzCEkj-23LGHp_Oveh2PZXokzY1AdUBFBB1uoT6cWz8M1$
[16] https://mail.openjdk.org/pipermail/zgc-dev/
## JavaFX 20 Early-Access Builds
These are early access builds of the JavaFX 20 Runtime, built from
openjdk/jfx [17]. They allow JavaFX application developers to build
and test their applications with JavaFX 20 on JDK 20. The latest
builds 10 (2022/12/5) are now available [18] with javadoc here [19].
Feedback should be forwarded to the openjfx-dev [19] mailing list.
For more details, you might want to listen this Inside Java podcast
episode [20].
[17]
https://urldefense.com/v3/__https://github.com/openjdk/jfx__;!!ACWV5N9M2RV99hQ!OqdzOerVCrwa1pDUQisIwaR0A2LNK9SOsJuYn2zDbXx3jTrmzCEkj-23LGHp_Oveh2PZXokzY1AdUBFBB1uoT-yh--jZ$
[18]
https://urldefense.com/v3/__https://jdk.java.net/javafx20/__;!!ACWV5N9M2RV99hQ!OqdzOerVCrwa1pDUQisIwaR0A2LNK9SOsJuYn2zDbXx3jTrmzCEkj-23LGHp_Oveh2PZXokzY1AdUBFBB1uoTyYpix7u$
[19]
https://urldefense.com/v3/__https://download.java.net/java/early_access/javafx20/docs/api/overview-summary.html__;!!ACWV5N9M2RV99hQ!OqdzOerVCrwa1pDUQisIwaR0A2LNK9SOsJuYn2zDbXx3jTrmzCEkj-23LGHp_Oveh2PZXokzY1AdUBFBB1uoT8FuoAe-$
[20] http://mail.openjdk.org/mailman/listinfo/openjfx-dev
[21]
https://urldefense.com/v3/__https://inside.java/2022/11/18/podcast-027/__;!!ACWV5N9M2RV99hQ!OqdzOerVCrwa1pDUQisIwaR0A2LNK9SOsJuYn2zDbXx3jTrmzCEkj-23LGHp_Oveh2PZXokzY1AdUBFBB1uoT9aDyolY$
## Topics of Interest:
- Building and Deploying Java Client Desktop Applications with JDK 17
and Beyond
https://urldefense.com/v3/__https://inside.java/2022/12/08/building-java-desktop-app/__;!!ACWV5N9M2RV99hQ!OqdzOerVCrwa1pDUQisIwaR0A2LNK9SOsJuYn2zDbXx3jTrmzCEkj-23LGHp_Oveh2PZXokzY1AdUBFBB1uoT-TlbGxG$
- Java Value Objects in Action with Valhalla - JEP Café #15
https://urldefense.com/v3/__https://inside.java/2022/12/06/jepcafe15/__;!!ACWV5N9M2RV99hQ!OqdzOerVCrwa1pDUQisIwaR0A2LNK9SOsJuYn2zDbXx3jTrmzCEkj-23LGHp_Oveh2PZXokzY1AdUBFBB1uoTxkGx8mB$
- Java 20 - Sneak Peek on the Foreign Function & Memory API
https://urldefense.com/v3/__https://minborgsjavapot.blogspot.com/2022/12/java-20-sneak-peek-on-panama-ffm-api.html__;!!ACWV5N9M2RV99hQ!OqdzOerVCrwa1pDUQisIwaR0A2LNK9SOsJuYn2zDbXx3jTrmzCEkj-23LGHp_Oveh2PZXokzY1AdUBFBB1uoT0juN5fC$
- A Glimpse at Java 20 - Pattern Matching, Concurrent Programming and
Valhalla - Inside Java Newscast #38
https://urldefense.com/v3/__https://inside.java/2022/12/01/newscast-38/__;!!ACWV5N9M2RV99hQ!OqdzOerVCrwa1pDUQisIwaR0A2LNK9SOsJuYn2zDbXx3jTrmzCEkj-23LGHp_Oveh2PZXokzY1AdUBFBB1uoT2ukiqgc$
- “JavaFX” - Inside Java Podcast #27
https://urldefense.com/v3/__https://inside.java/2022/11/18/podcast-027/__;!!ACWV5N9M2RV99hQ!OqdzOerVCrwa1pDUQisIwaR0A2LNK9SOsJuYn2zDbXx3jTrmzCEkj-23LGHp_Oveh2PZXokzY1AdUBFBB1uoT9aDyolY$
- Generational ZGC - Inside Java Newscast #37
https://urldefense.com/v3/__https://inside.java/2022/11/17/insidejava-newscast-037/__;!!ACWV5N9M2RV99hQ!OqdzOerVCrwa1pDUQisIwaR0A2LNK9SOsJuYn2zDbXx3jTrmzCEkj-23LGHp_Oveh2PZXokzY1AdUBFBB1uoT6cWz8M1$
- Java 17 to 20 Pattern Matching full tutorial with Records,
Instanceof and Switch - JEP Café #14
https://urldefense.com/v3/__https://inside.java/2022/11/08/jepcafe14/__;!!ACWV5N9M2RV99hQ!OqdzOerVCrwa1pDUQisIwaR0A2LNK9SOsJuYn2zDbXx3jTrmzCEkj-23LGHp_Oveh2PZXokzY1AdUBFBB1uoT3DvAsLg$
- Script Friendly JDK Download URLs
https://urldefense.com/v3/__https://inside.java/2022/11/14/sip072/__;!!ACWV5N9M2RV99hQ!OqdzOerVCrwa1pDUQisIwaR0A2LNK9SOsJuYn2zDbXx3jTrmzCEkj-23LGHp_Oveh2PZXokzY1AdUBFBB1uoT5Fg1RAQ$
- Using the JShell API to improvement a Java Source Browser
https://urldefense.com/v3/__https://inside.java/2022/11/21/jshell-java-source-browser/__;!!ACWV5N9M2RV99hQ!OqdzOerVCrwa1pDUQisIwaR0A2LNK9SOsJuYn2zDbXx3jTrmzCEkj-23LGHp_Oveh2PZXokzY1AdUBFBB1uoT2bwQ-OL$
~
As usual, let us know if you find any quirks while testing your
project(s) on the latest JDK early-access builds. As year-end is
approaching, I'd like to thank you for being part of the OpenJDK
Quality Outreach Program. I hope that you will disconnect a bit to
spend time with your family and your friends. See you in 2023 with
Java 20 and Java 21!
--David