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-...@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


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@poi.apache.org
For additional commands, e-mail: dev-h...@poi.apache.org

Reply via email to