JDK 18: Rampdown Phase 1 & Early-Access builds 27

David Delabassee david.delabassee at oracle.com
Fri Dec 10 10:31:04 UTC 2021

Hi All!

Thank you for being part of the OpenJDK Quality Outreach Program. As 
year-end 2021 approaches, I'd like to share some updates on JDK 18, 
which is scheduled for General Availability on March 22, 2022.

JDK 18 has now entered Rampdown Phase One (RDP1) [1], which means that 
the main-line has been forked into a dedicated JDK 18 stabilization 
repository. At this point, the overall JDK 18 feature set is now frozen 
and no additional JEPs will be targeted to JDK 18. Only low-risk 
enhancements that add small bits of missing functionality or improve 
usability might still be considered. The next few weeks should be 
leveraged to try to identify and resolve as many issues as possible 
(i.e. before JDK 18 enters the Release Candidates phase).

And as you can see below, JDK 18 EA Builds 26 & 27 include fixes for 
issues that were reported by some of you! So thank you for your help 
contributing to the overall quality of OpenJDK!


## JEP 400 - UTF-8 by Default

All JEPs are now integrated, but we would like to draw your attention to 
JEP 400 especially if you are deploying on Windows as it might induce 
some incompatible behavior on that platform.

JEP 400 [2] is changing the default charset to UTF-8. This aligns with 
the existing `newBufferedReader`/`Writer` methods of the 
`java.nio.file.Files` class where UTF-8 is the default when no explicit 
charset is set. By making UTF-8 the default charset, the JDK I/O APIs 
will now always work in the same, predictable manner, with no need to 
pay attention to the host and or user’s environment!

Further, we encourage you to test your project(s) with the latest JDK 18 
Early Access builds. We don't expect issues on macOS and Linux as their 
default encoding is already UTF-8. On Windows, especially for East Asian 
locales such as Chinese/Japanese/Korean, some incompatible behavior 
could be anticipated. If that’s the case, please consider a mitigation 
strategy [3].

[2] https://openjdk.java.net/jeps/400
[3] https://inside.java/2021/10/04/the-default-charset-jep400/

## JDK 18

JDK 18 Early-Access builds 27 are now available [4], and are provided 
under the GNU General Public License v2, with the Classpath Exception. 
Make sure to check the Release Notes [5]. As usual, we encourage you to 
test your project(s) using those EA builds and provide us feedback.

[4] https://jdk.java.net/18/
[5] https://jdk.java.net/18/release-notes

### JEPs integrated to JDK 18:

- JEP 400: UTF-8 by Default
- JEP 408: Simple Web Server
- JEP 413: Code Snippets in Java API Documentation
- JEP 416: Reimplement Core Reflection with Method Handles
- JEP 417: Vector API (Third Incubator)
- JEP 418: Internet-Address Resolution SPI
- JEP 419: Foreign Function & Memory API (Second Incubator)
- JEP 420: Pattern Matching for switch (Second Preview)
- JEP 421: Deprecate Finalization for Removal

### Changes in recent builds that maybe of interest:

#### Build 27:

- JDK-8266435: WBMPImageReader.read() should not truncate the input 
stream [Reported by PDFBox]
- JDK-8278078: Cannot reference super before supertype constructor has 
been called
- JDK-8177819: DateTimeFormatterBuilder zone parsing should recognise DST
- JDK-8277965: Enclosing instance optimization affects serialization
- JDK-8275821: Optimize random number generators developed in 
JDK-8248862 using Math.unsignedMultiplyHigh()
- JDK-8225181: KeyStore should have a getAttributes method
- JDK-8275082: Update XML Security for Java to 2.3.0
- JDK-8278270: ServerSocket is not thread safe
- JDK-8277863: Deprecate sun.misc.Unsafe methods that return offsets

#### Build 26:

- JDK-8277451: j.l.r.Field::set on static field with invalid argument 
type should throw IAE [Reported by Hibernate & ByteBuddy]
- JDK-8258117: jar tool sets the time stamp of module-info.class entries 
to the current time [Reported by Apache Maven]
- JDK-8268743: Require a better way for copying data between 
MemorySegments and on-heap arrays [Reported by Apache Lucene]
- JDK-8277986: Typo in javadoc of java.util.zip.ZipEntry#setTime 
[Reported by Apache Ant]
- JDK-8277861: Terminally deprecate Thread.stop
- JDK-8276665: ObjectInputStream.GetField.get(name, object) should throw 
- JDK-8271623: Omit enclosing instance fields from inner classes that 
don't use it
- JDK-8231107: Allow store password to be null when saving a PKCS12 KeyStore
- JDK-8193682: Infinite loop in ZipOutputStream.close()
- JDK-8277459: Add `jwebserver` tool [see Topics of Interest]

#### Build 25:

- JDK-8259643: ZGC can return metaspace OOM prematurely
- JDK-8277212: GC accidentally cleans valid megamorphic vtable inline caches
- JDK-8276970: Default charset for PrintWriter that wraps PrintStream
- JDK-8272773: Configurable card table card size
- JDK-4337793: Mark non-serializable fields of 
java.security.cert.Certificate and CertPath

#### Build 24:

- JDK-8275056: Allow G1 heap regions up to 512MB [see Topics of Interest]
- JDK-8271515: Integration of JEP 417: Vector API (Third Incubator)
- JDK-8267108: Alternate Subject.getSubject and doAs APIs that do not 
depend on Security Manager APIs
- JDK-8244202: Implementation of JEP 418: Internet-Address Resolution SPI
- JDK-8276186: Require getAvailableLocales() methods to include Locale.ROOT
- JDK-8276184: Exclude lambda proxy class from the CDS archive if its 
caller class is excluded

## Project Loom Update

New Loom Early-Access builds are also available [6]. Those EA builds are 
based on JDK18 EA build 25 and offer a new structured concurrency API 
[7]. These EA builds are provided under the GNU General Public License, 
version 2, with the Classpath Exception and are produced for the purpose 
of gathering feedback. Use for any other purpose is at your own risk. 
Feedback should be send to the `loom-dev` mailing list [8].

On that note, you might also want to check this 'On Parallelism and 
Concurrency' piece [9].

[6] https://jdk.java.net/loom/
[8] https://mail.openjdk.java.net/mailman/listinfo/loom-dev
[9] https://inside.java/2021/11/30/on-parallelism-and-concurrency/

## Topics of Interest:

- JDK 18: Working with the Simple Web Server

- JDK 18: Quality Outreach Heads-up: JEP 411

- JDK 18: Quality Outreach Heads-up: JEP 416

- JDK 18 will bump heap region size limit to 512MB (Vs. 32Mb today)

- JDK 18: JEP 400 and the Default Charset

- Panama/Foreign Status Update

- GC progress from JDK 8 to JDK 17

- JDK Migration Guide

In closing, I'd like to thank you again for being a welcomed part of the 
Quality Outreach program! We look forward to your continued 
participation. Please enjoy the holiday season and have a happy new year!


More information about the quality-discuss mailing list