David, Richard,
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!
[1]
https://mail.openjdk.java.net/pipermail/jdk-dev/2021-December/006287.html
## 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
ClassNotFoundException
- 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/
[7]
https://mail.openjdk.java.net/pipermail/loom-dev/2021-November/003072.html
[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
https://inside.java/2021/12/06/working-with-the-simple-web-server/
- JDK 18: Quality Outreach Heads-up: JEP 411
https://inside.java/2021/12/06/quality-heads-up/
- JDK 18: Quality Outreach Heads-up: JEP 416
https://inside.java/2021/11/29/quality-heads-up/
- JDK 18 will bump heap region size limit to 512MB (Vs. 32Mb today)
https://tschatzl.github.io/2021/11/15/heap-regions-x-large.html
- JDK 18: JEP 400 and the Default Charset
https://inside.java/2021/10/04/the-default-charset-jep400/
- Panama/Foreign Status Update
https://mail.openjdk.java.net/pipermail/panama-dev/2021-December/015895.html
- GC progress from JDK 8 to JDK 17
https://kstefanj.github.io/2021/11/24/gc-progress-8-17.html
- JDK Migration Guide
https://docs.oracle.com/en/java/javase/17/migrate/getting-started.html
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!
--David