JDK 20 EAb22, GenZGC EA builds, JavaFX 20 EAb5 and several heads-ups!

David Delabassee david.delabassee at oracle.com
Mon Nov 7 17:07:53 UTC 2022


Greetings,

With JavaOne in Las Vegas, last month was epically busy! It was great to 
finally have the ability to meet and discuss the Quality Outreach 
program with some of you... face-to-face!

This installment of the newsletter is packed as we have several 
heads-ups, including new Early-Access builds being made available. The 
JDK 20 schedule has been proposed [1]. The next major milestone is 
Rampdown Phase One which should happen in just a month on December 8! 
The next few weeks will be particularly interesting as we will see which 
from the candidate JEPs recently announced (see 'Topics of Interest' 
section below) will be proposed to target JDK 20 [2]. And given that JDK 
20 is getting closer, we are eagerly waiting for your test feedback on 
your projects running with the latest JDK 20 EA builds.

[1] https://mail.openjdk.org/pipermail/jdk-dev/2022-October/007108.html
[2] https://openjdk.org/projects/jdk/20/


### Heads-up - JDK 20: `java.net.URL` parsing fix & behavior change

Before JDK 20, some of the parsing/validation performed by the JDK 
built-in `URLStreamHander` implementations were delayed until 
`URL::openConnection` or `URLConnection::connect` was called. Starting 
JDK 20, some of these parsing/validations are now performed early, i.e. 
within URL constructors.

An exception caused by a malformed URL that would have been delayed 
until the connection was opened or connected may starting JDK 20, throw 
a `MalformedURLException` at URL construction time.

We suggest testing your project(s) against this change. And for those 
who want to rely on the old behavior, a new system property has been 
introduced to revert, on the command line, to the previous behavior.

For more details, please see JBS-8293590 [3] and the release notes [4].

[3] https://bugs.openjdk.org/browse/JDK-8293590
[4] https://bugs.openjdk.org/browse/JDK-8295750


### Heads-up - JDK 20: Thread.stop(), Thread.suspend() and 
Thread.resume() degradation

The ability to stop, suspend, or resume a thread with the corresponding 
Thread.stop(), Thread.suspend() or Thread.resume() methods have been 
removed in JDK 20. Those methods have been degraded to throw a UOE 
exception (UnsupportedOperationException).

Using those methods was inherently unsafe. That is also why they were 
deprecated since JDK 1.2 (1998!) and were flagged 'forRemoval' in 
previous features release.

We do not expect this behavior change to cause issues on well-maintained 
codebase.

For more details please check JDK-8289610 [5], JDK-8249627 [6], and the 
Java Thread Primitive Deprecation FAQ [7].

[5] https://bugs.openjdk.org/browse/JDK-8289610
[6] https://bugs.openjdk.org/browse/JDK-8249627
[7] 
https://docs.oracle.com/en/java/javase/19/docs/api/java.base/java/lang/doc-files/threadPrimitiveDeprecation.html


### Heads-up - JDK 20: Deprecate and disable the legacy parallel class 
loading workaround for non-parallel-capable class loaders.

Prior to JDK 7, custom class loaders using non-hierarchical class 
delegation model were prone to deadlock. A workaround was added in the 
HotSpot VM (JDK 6) to allow parallel class loading for 
non-parallel-capable class loaders to avoid deadlocks.

Parallel-capable class loaders were introduced in Java SE 7 [8] to 
support parallel class loading to implement a deadlock-free class loader 
using a non-hierarchical class delegation model. [8] and [9] describe 
how to migrate those class loaders depending on this workaround to be 
multi-threaded parallel-capable class loaders.

This workaround was intended to allow those developers to migrate to the 
new mechanism. JDK 7 was released 11 years ago so it is now expected 
that those deadlock-prone custom class loaders have been migrated to the 
parallel-capable class loaders. As a consequence, this workaround is 
removed in JDK 20 as it impedes eliminating the object monitors from 
pinning for virtual threads.

We suggest confirming that your codebase is not relying on this legacy 
workaround. If it still is, you should migrate away from it ASAP. Please 
note that the legacy behavior can be temporary re-enabled using a 
special flag. For additional details, please check [10] and [11].

[8] https://docs.oracle.com/javase/7/docs/technotes/guides/lang/cl-mt.html
[9] https://openjdk.org/groups/core-libs/ClassLoaderProposal.html
[10] https://bugs.openjdk.org/browse/JDK-8295848
[11] https://bugs.openjdk.org/browse/JDK-8296446


### Heads-up - JavaFX builds

Oracle is now publishing JavaFX builds, starting with early access 
builds of JavaFX 20, at jdk.java.net/javafx20 [12]. Developers are now 
able to download JavaFX and JDK builds from the same place, and use 
jlink to create a custom JDK that includes the JavaFX modules.

The latest JavaFX 20 EA builds (b5-2022/10/28) are now available [12] 
along with the related javadoc [13]. These early-access builds are 
provided under the GNU General Public License, version 2, with the 
Classpath Exception. Feedback should be reported to the openjfx-dev [14] 
mailing list.

To learn more, stay tuned for an upcoming Inside Java Podcast episode 
that will cover this in detail.

[12] https://jdk.java.net/javafx20/
[13] 
https://download.java.net/java/early_access/javafx20/docs/api/index.html
[14] https://mail.openjdk.org/pipermail/openjfx-dev


### Heads-up - Generational ZGC Early-Access builds

The first Early Access builds of Generational ZGC have been published at 
jdk.java.net/genzgc [15] and are also available via the 
oracle-actions/setup-java GitHub action [16].

ZGC is a low latency, i.e. sub-milliseconds, Garbage Collector. This 
effort aims to introduce support for generations in ZGC. For more 
information, you can check the draft JEP [17] and listen to this recent 
Inside Java Podcast episode [18].

We encourage you to try out GenZGC and provide feedback on the zgc-dev 
[19] mailing list.

[15] https://jdk.java.net/genzgc/
[16] https://github.com/oracle-actions/setup-java
[17] https://bugs.openjdk.org/browse/JDK-8272979
[18] https://inside.java/2022/06/29/podcast-024/
[19] https://mail.openjdk.org/pipermail/zgc-dev


## Heads-up - New Project Loom Early-Access Builds

The latest Loom EA builds (20-loom+20-34) are now available [20]. These 
EA builds are provided under the GNU General Public License, version 2, 
with the Classpath Exception. These EA builds include a snapshot of the 
ScopedValue API, being developed in JEP 429 [21]. Feedback can be sent 
to the loom-dev at openjdk.org mailing list [22].

[20] https://jdk.java.net/loom/
[21] https://openjdk.org/jeps/429
[22] https://mail.openjdk.org/pipermail/loom-dev


## JDK 20 Early-Access Builds

JDK 20 Early-Access builds 22 are now available [23], and are provided 
under the GNU General Public License v2, with the Classpath Exception. 
The Release Notes are available here [24].

[23] https://jdk.java.net/20/
[24] https://jdk.java.net/20/release-notes

### Changes in recent builds that may be of interest:

#### Build 22:
- JDK-8057113: (fs) Path should have a method to obtain the filename 
extension
- JDK-8256660: Disable DTLS 1.0 by default
- JDK-8291336: Add ideal rule to convert floating point multiply by 2 
into addition

#### Build 21:
- JDK-8137022: Concurrent refinement thread adjustment and 
(de-)activation suboptimal
- JDK-8134303: Introduce -XX:-G1UseConcRefinement
- JDK-8295657: SA: Allow larger object alignments

#### Build 20:
- JDK-8293590: Some syntax checks performed by URL.openConnection() 
could be performed earlier, at URL construction
- JDK-8290368: Introduce LDAP and RMI protocol-specific object factory 
filters to JNDI implementation
- JDK-6924219: (fc spec) FileChannel.write(ByteBuffer, position) 
behavior when file opened for append not specified
- JDK-8292177: InitialSecurityProperty JFR event
- JDK-8295173: (tz) Update Timezone Data to 2022e
- JDK-8292698: Improve performance of DataInputStream

#### Build 19:
- JDK-8294821: Class load improvement for AES crypto engine
- JDK-8295013: OopStorage should derive from CHeapObjBase
- JDK-8283699: Improve the peephole mechanism of hotspot
- JDK-8289552: Make intrinsic conversions between bit representations of 
half precision values and floats
- JDK-8290036: Define and specify Runtime shutdown sequence

#### Build 18:
- JDK-8294609: C2: Improve inlining of methods with unloaded signature 
classes
- JDK-8279283: BufferedInputStream should override transferTo
- JDK-8294626: Improve URL protocol lower casing

#### Build 17:
- JDK-8289610: Thread.Stop changed to throw UnsupportedOperationException
- JDK-8249627: Thread.suspend/resume changed to throw 
UnsupportedOperationException
- JDK-8254711: Add java.security.Provider.getService JFR Event
- JDK-8294062: Improve parsing performance of j.l.c.MethodTypeDesc
- JDK-8255670: Improve C2's detection of modified nodes
- JDK-8292296: Use multiple threads to process ParallelGC deferred updates


## Topics of Interest:

- New candidate JEP: 431: Sequenced Collections
https://openjdk.org/jeps/431

- New candidate JEP: 432: Record Patterns (2nd Preview)
https://openjdk.org/jeps/432

- New candidate JEP: 433: Pattern Matching for switch (4th Preview)
https://openjdk.org/jeps/433

- New candidate JEP: 434: Foreign Function & Memory API (2nd Preview)
https://openjdk.org/jeps/434

- New candidate JEP: 435: Asynchronous Stack Trace VM API
https://openjdk.org/jeps/435

- Selectively Shifting and Constraining Computation
https://openjdk.org/projects/leyden/notes/02-shift-and-constrain

- The Age of Virtual Threads
https://inside.java/2022/10/13/the-age-of-virtual-threads/

- Dissecting Memory Sessions
https://inside.java/2022/11/04/unifying-memory-addresses-and-memory-segments/

- GraalVM in OpenJDK and More JavaOne Announcements - Inside Java 
Newscast #36
https://inside.java/2022/11/03/newscast-036/

- Inside Java | JavaOne 2022 Technical Keynote
https://inside.java/2022/10/24/inside-java-technical-keynote/

- Virtual Threads: New Foundations for High-Scale Java Applications
https://www.infoq.com/articles/java-virtual-threads/


## October 2022 Critical Patch Update Released

As part of the October 2022 CPU, we released JDK 19.0.1, JDK 17.0.5 LTS, 
JDK 11.0.17 LTS and JDK 8u351 as well as OpenJDK 19.0.1.



That's it for this time. As usual, let us know if you find any issues 
while testing your project(s) on the latest JDK early-access builds. 
Thanks for your support!

--David



More information about the quality-discuss mailing list