Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[jetty-dev] JDK 18: Rampdown Phase 1 & Early-Access builds 27
  • From: David Delabassee <david.delabassee@xxxxxxxxxx>
  • Date: Fri, 10 Dec 2021 09:54:02 +0100
  • Arc-authentication-results: i=1; 1; spf=pass; dmarc=pass action=none; dkim=pass; arc=none
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed;; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=7AOUiThTkPPuyYN73ZfX/aCUAYh37mftf964myD/IXY=; b=A4ND0wunS4VnFAIpSt3zoVggR+5ATExGM/dYJYDuKk7+ubsHc9Y5RbtbfzdRH836UQLdFRB64Z8RoKK9Hiko8exBj3YR+uDbCbtO5jjDeS8rAFBbYs2cIA4zCO3UIFGnBFarwgPIFy4IEyruuGUMtgPVvLjv3vPfmaEAviowY1vUmRx3fSgsFXXPDhZVQHY8jHVkqqBVxQtFhhzsBlY4C/QY8gAkLhzcs0ZRYCg9Qi90hGvZSwTNuxi1WOZR1FAU2xz9ci6JNWlROQrGMRScKAVOixC8DWhfVI0tebj2DSmIY+HqdPjTpYYfnMBfIqKho4Zi032O4arZpGnk7JqThw==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector9901;; cv=none; b=AWDx65YSLVoC0Q6qHmu7Yss3SG75agnbgbCWPqKX8aVGyX1BRUnlQoA+5jLEvpcTHdNXV3NmtpzjfhhnVzxo9HPc83Y0FDtTFQrvUoHGBTqJAAG7ZNvPskwE24a36KAFRzjkR+aFUWC8Hdj2Uc5hdeKGkHW78z+TSVqEBKJYjv/9KBLGLOff1BHHhatXZ8ScsFGAeZi0zkrA0qugKejTEUiAQr6eXTSmgySGx4lUK6DCyuMOQBEeDbm64NDdWzELmJpZU4J+u/nyJwG4f5ThVtdo8hQhDtCxMJUOdfkHyoJ1xkTP6z33ez+735cL5q9QEL3rIEu/JRGbtcVYcLWq4w==
  • Delivered-to: jetty-dev@xxxxxxxxxxx
  • List-archive: <>
  • List-help: <>
  • List-subscribe: <>, <>
  • List-unsubscribe: <>, <>
  • User-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:91.0) Gecko/20100101 Thunderbird/91.3.2


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


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


### 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: 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 [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 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].


## 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!

Back to the top