Welcome to a new Quality Outreach update!

This time, we have one update but a major one: JEP 425 (Virtual Threads preview) has been integrated into the OpenJDK mainline! JDK 19 Early-Access builds 22 are the first mainline builds with Virtual Threads (preview) support. So, Project Loom is now getting closer and closer!

Please make sure to check the Heads-up below even if you don’t intend to use virtual threads in the short future.


## Heads-up - JEP 425 Virtual Threads (preview) testing

The goal of Project Loom is to introduce in the Java platform an easy-to-use, high-throughput lightweight concurrency model, and a related new concurrent programming model.

Developed in Project Loom, JEP 425 introduces virtual threads to the Java Platform. Virtual threads are lightweight threads that dramatically reduce the effort of writing, maintaining, and observing high-throughput concurrent applications. Note that virtual threads are a preview API in JDK 19. Please make sure to read 'JEP 425: Virtual Threads (Preview)' for a detailed explanation.

A lot of testing has already been done but we are asking, once again, your help to test your project(s) with the latest JDK 19 Early-Access builds, even if you don’t intend to use virtual threads any time soon.

There are two approaches to test your project:
1. Update your code to use virtual threads …or
2. Simply test your existing unchanged code with the preview feature enabled.

Both approaches should yield valuable feedback.

If you choose to adapt your application to use virtual threads (cf. JavaDoc [2]), be aware that in some cases it’s not just about updating your code to use virtual threads instead of platform threads; there are some additional considerations. For example, virtual threads shouldn’t be pooled [3], code that relies heavily on thread locals [4] will require some work to move to a world where there is a new thread for each task, etc.

Given that are some minor behavior changes and that `ThreadGroup` has been degraded, testing your code as-is, i.e., without using virtual threads but with the preview feature enabled at runtime, will also be useful. For more details, please check 'JEP 425 - Risks and Assumptions' [5].

One difference between to the EA builds published by Project Loom and the latest JDK 19 EA builds is that the `--enable-preview` flag is required at run-time to use the new APIs. It’s not possible to use the APIs with core reflection to avoid the need for `--enable-preview`.

Finally, some tools especially tools relying on JVM TI agents might not be fully ready for virtual threads.

Your help testing this important update is greatly appreciated, all feedback should be sent to the 'loom-dev' mailing list [6].

[1] https://openjdk.java.net/jeps/425
[2] https://download.java.net/java/early_access/jdk19/docs/api/java.base/java/lang/Thread.html
[3] https://openjdk.java.net/jeps/425#Do-not-pool-virtual-threads
[4] https://openjdk.java.net/jeps/425#Thread-local-variables
[5] https://openjdk.java.net/jeps/425#Risks-and-Assumptions
[6] https://mail.openjdk.java.net/pipermail/loom-dev/


## JDK 19 Early-Access builds

JDK 19 Early-Access builds 22 are now available [7], and are provided under the GNU General Public License v2, with the Classpath Exception. Make sure to check the Release Notes [8] and the JavaDoc [9].

[7] https://jdk.java.net/19/
[8] https://jdk.java.net/19/release-notes
[9] https://download.java.net/java/early_access/jdk19/docs/

### Current JDK 19 JEPs
- 405: Record Patterns (Preview) - Proposed to target
- 422: Linux/RISC-V Port - Integrated
- 424: Foreign Function & Memory API (Preview) - Integrated
- 425: Virtual Threads (Preview) - Integrated
- 426: Vector API (4th Incubator) - Targeted
- 427: Pattern Matching for switch (3rd Preview) - Targeted

### Recent changes that may be of interest:

Build 22:
- JDK-8284161: Implementation of Virtual Threads (Preview)
- JDK-8285947: Avoid redundant HashMap.containsKey calls in ZoneName
- JDK-8212136: Remove finalizer implementation in SSLSocketImpl
- JDK-8285872: JFR: Remove finalize() methods
- JDK-8285914: AppCDS crash when using shared archive with old class file
- JDK-8286163: micro-optimize Instant.plusSeconds
- JDK-8282420: JFR: Remove event handlers
- JDK-8282559: Allow multiple search terms in javadoc search

Build 21:
- JDK-8255552: Add DES/3DES/MD5 to jdk.security.legacyAlgorithms
- JDK-8278370: [win] Disable side-by-side installations of multiple JDK updates in Windows JDK installers - JDK-8281010: [macos] Disable side-by-side installations of multiple JDK updates in macOS JDK installers
- JDK-8236128: Allow jpackage create installers for services
- JDK-8279598: provide adapter from RandomGenerator to Random

Build 20:
- JDK-8284553: Deprecate the DEFAULT static field of OAEPParameterSpec
- JDK-8283620: System.out does not use the encoding/charset specified in the Javadoc
- JDK-8285445: Enable Windows Alternate Data Streams by default
- JDK-8284930: Re-examine FilterInputStream mark/reset
- JDK-8284890: Support for Do not fragment IP socket options
- JDK-8282823: javac should constrain more uses of preview APIs
- JDK-8285477: Add a PRECISION public static field to j.l.Float and j.l.Double

Build 19:
- JDK-8186958: New Methods to Create Preallocated HashMaps
- JDK-8284775: Simplify String.substring(_, length()) calls
- JDK-8283892: Compress and expand bits
- JDK-8280915: Better parallelization for AbstractSpliterator and IteratorS…
- JDK-8284681: compiler/c2/aarch64/TestFarJump.java fails with "RuntimeExce…
- JDK-8283790: G1: Remove redundant card/heap-address transition
- JDK-8285001: Simplify StringLatin1.regionMatches
- JDK-8284880: Re-examine sun.invoke.util.Wrapper hash tables
- JDK-8278356: Improve file creation


## Topics of Interest

- Java Cryptographic Roadmap update https://java.com/en/jre-jdk-cryptoroadmap.html - Virtual Thread Deep Dive https://inside.java/2022/04/07/insidejava-newscast-023/ - Why Write an Empty finalize() Method? https://stuartmarks.wordpress.com/2022/04/27/why-write-an-empty-finalize-method/ - WHEN and NULL In Pattern Matching https://inside.java/2022/05/05/insidejava-newscast-024/ - JDK 8 to JDK 18 in GC: 10 Releases, 2000+ Enhancements https://inside.java/2022/05/02/odl-jdk8-to-jdk18-gc/
- ZGC - What's new in JDK 18 https://malloc.se/blog/zgc-jdk18
- Java Next - From Amber to Loom, from Panama to Valhalla https://inside.java/2022/05/09/java-next/

## JDK Update Patch Release

As announced with the April 2022 CPU release, we have produced update patch releases for all Java SE supported versions. The new versions are JDK 18.0.1.1 (publicly available), 17.0.3.1 (publicly available), 11.0.15.1, 8u333, 7u343, and OpenJDK 18.0.1.1 (publicly available).


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




Reply via email to