Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[jetty-dev] JDK 20 is now GA, JDK 21 Early-Access builds, and important heads-up!
  • From: David Delabassee <david.delabassee@xxxxxxxxxx>
  • Date: Tue, 28 Mar 2023 15:40:14 +0200
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; 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=9BxMI9p3Zuc4aXQOHGMpTvh/zs52GvK+uzY5GrvELCk=; b=LyalBTP8JMTKl320gI0wM8Hlenq2hxqtQ1W/2fupkgPPlNcYuyDEfCuj99Rwfn38l7ZV255tP2fzmB8Nq/9FCq8yCXp9Qb7Ue3gumdYoBLg20T7UI8AmEyKVT+iaZxaqRj8ny67zlqp1bb/Qu5qiorLKcdPWoxYwnXdCAlbr8hN0uJ7bZxTgp9dHRq4h+lp29yDJa9B2jc5xTn+u+HC5bsCeVNxXqBB1v3/B+NxhuSA7Bj/MvCIdCucd8mRyxF9s87//d9IrBQrxZBI+9sHPGnRNiMhllTgGSTLVZxqKkhy9bo+NE96trXa6uJDqdYzLkn0IuEEkG5aeK0LlrK/Wpw==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=UXHWsujxDzfmT5vj+rFp5YGZj4AvL3gS5DaBr9AJvZUlwYHRSkm49+MQvBSSjNvq+D3UlDx77jV0hqN/r/D0PL10d5tVN3rhnJPFPXDNGxg6eqtza03nfBR6iJGAZ09M/0GZDiDPY7TSYLIq/EDfFHss40TTS080epgpJYlGLWPWSBUJIJ5g4L9B/gnXTvYHAk+q9JG2TNnDFPObrPOLgr3nfOgjKBWsE8BnlC7LuJ34dZn6y7nzcPHJ8AWjTP89XIf8Wg+pT9Rm0B5KMD97HP40uxTpmpO9C5F4Nbspc2gHAYqleJ1PGi4RpGSevoUZqhTNXKk33ukFIOGQOdZpDA==
  • Delivered-to: jetty-dev@xxxxxxxxxxx
  • List-archive: <https://www.eclipse.org/mailman/private/jetty-dev/>
  • List-help: <mailto:jetty-dev-request@eclipse.org?subject=help>
  • List-subscribe: <https://www.eclipse.org/mailman/listinfo/jetty-dev>, <mailto:jetty-dev-request@eclipse.org?subject=subscribe>
  • List-unsubscribe: <https://www.eclipse.org/mailman/options/jetty-dev>, <mailto:jetty-dev-request@eclipse.org?subject=unsubscribe>
  • User-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:102.0) Gecko/20100101 Thunderbird/102.9.0

Welcome to the latest OpenJDK Quality Outreach update!

Last week was busy as we released both Java 20 and JavaFX 20. To celebrate the launch, we hosted a live event focused on Java 20, i.e. Level Up Java Day. All the sessions recordings will be made available shortly on the YouTube Java channel.

Some recent events shown us that it is useful to conduct tests using the latest early-access OpenJDK builds. This will benefit the OpenJDK codebase but also your own codebase. Sometime, a failure could be due to an actual regression introduced in OpenJDK. In that case, we obviously want to hear about it while we can still address it. But sometime, a failure could also be due to a subtle behaviour change… that works as expected. Regardless of if it's a bug or a test that is now broken due to a behaviour change, we want to hear from you. In the latter case, it might also mean that we should probably communicate more about those changes even if they might seem subtle. On that note, please make sure to check all the 2 Heads-Up below: "Support for Unicode CLDR Version 42" and "New network interface names on Windows".

So please, let us know if you observe anything using the latest early-access builds of JDK 21.


## Heads-Up - JDK 20 - Support for Unicode CLDR Version 42

The JDK's locale data is based on the Unicode Consortium's Unicode Common Locale Data Repository (CLDR). As mentioned in the December 2022 Quality Outreach newsletter [1], JDK 20 upgraded CLDR [2] to version 42 [3], which was released in October 2022. This version includes a "more sophisticated handling of spaces" [4] that replaces regular spaces with non-breaking spaces (NBSP / `\u00A0`) or narrow non-breaking spaces (NNBSP / `\u202F`):
- in time formats between `a` and time
- in unit formats between {0} and unit
- in Cyrillic date formats before year marker such as `г`

Other noticeable changes include:
* " at " is no longer used for standard date/time format ’ [5]
* fix first day of week info for China (CN) [6]
* Japanese: Support numbers up to 9999京 [7]

As a consequence, production and test code that produces or parses locale-dependent strings like formatted dates and times may change behavior in potentially breaking ways (e.g. when a handcrafted datetime string with a regular space is parsed, but the parser now expects an NBSP or NNBSP). Issues can be hard to analyze because expected and actual strings look very similar or even identical in various text representations. To detect and fix these issues, make sure to use a text editor that displays different kinds of spaces differently.

If the required fixes can't be implemented when upgrading to JDK 20, consider using the JVM argument `-Djava.locale.providers=COMPAT` to use legacy locale data. Note that this limits some locale-related functionality and treat it as a temporary workaround, not a proper solution. Moreover, the `COMPAT` option will be eventually removed in the future.

It is also important to keep in mind that this kind of locale data evolves regularly so programs parsing/composing the locale data by themselves should be routinely checked with each JDK release.

[1] https://mail.openjdk.org/pipermail/quality-discuss/2022-December/001100.html
[2] https://bugs.openjdk.org/browse/JDK-8284840
[3] https://cldr.unicode.org/index/downloads/cldr-42
[4] https://unicode-org.atlassian.net/browse/CLDR-14032
[5] https://unicode-org.atlassian.net/browse/CLDR-14831
[6] https://unicode-org.atlassian.net/browse/CLDR-11510
[7] https://unicode-org.atlassian.net/browse/CLDR-15966


## Heads-Up - JDK 21 - New network interface names on Windows

Network Names that the JDK assigns to network interfaces on Windows are changing in JDK 21 [8].

The JDK historically synthesized names for network interfaces on Windows. This has changed to use the names assigned by the Windows operating system. For example, the JDK may have historically assigned a name such as “eth0” for an ethernet interface and “lo” for the loopback. The equivalent names that Windows assigns may be names such as “ethernet_32768” and “loopback_0".

This change may impact code that does a lookup of network interfaces with the `NetworkInterace.getByName(String name)` method. It also may also be surprising to code that enumerates all network interfaces with the `NetworkInterfaces.networkInterfaces()` or `NetworkInterface.getNetworkInterfaces()` methods as the names of the network interfaces will look different to previous releases. Depending on configuration, it is possible that enumerating all network interfaces will enumerate network interfaces that weren’t previously enumerated because they didn’t have an Internet Protocol address assigned. The display name returned by `NetworkInterface::getDisplayName` has not changed so this should facilitate the identification of network interfaces when using Windows native tools.

[8] https://bugs.openjdk.org/browse/JDK-8303898


## JDK 20 General Availability

JDK 20, the reference implementation of Java 20, is now Generally Available [9]. The GA builds 36 are available [10], and are provided under the GNU General Public License v2, with the Classpath Exception. The Release Notes are available here [11] and the javadocs here [12].

This release includes 7 JEPs, all in various stages of incubation and preview:
- JEP 429: Scoped Values (Incubator)
- JEP 432: Record Patterns (2nd Preview)
- JEP 433: Pattern Matching for switch (4th Preview)
- JEP 434: Foreign Function & Memory API (2nd Preview)
- JEP 436: Virtual Threads (2nd Preview)
- JEP 437: Structured Concurrency (2nd Incubator)
along with hundreds of smaller enhancements and thousands of bug fixes.

Thank you to everyone who contributed to this release, including participants in this program who provided feedback on JDK 20.

[9] https://mail.openjdk.org/pipermail/jdk-dev/2023-March/007517.html
[10] https://jdk.java.net/20/
[11] https://jdk.java.net/20/release-notes
[12] https://docs.oracle.com/en/java/javase/20/docs/api/


## JavaFX 20 General Availability

Open-source builds of JavaFX 20 are now Generally Available [13], under the GNU General Public License, version 2, with the Classpath Exception. The JavaFX runtime is delivered as an SDK and as a set of jmods for each platform. You can use the SDK to compile and run JavaFX applications. You can use the jmods with jlink to create a JDK that includes the JavaFX modules, and optionally, your modular application. JavaFX 20 is designed to work with JDK 20, but it is known to work with JDK 17 and later versions.

The Release Notes are available here [14], JavaFX 20 API javadocs are also available [15].

[13] https://jdk.java.net/javafx20/
[14] https://github.com/openjdk/jfx/blob/jfx20/doc-files/release-notes-20.md
[15] https://download.java.net/java/GA/javafx20/bdc68b4b9cbc4ebcb30745c85038d91d/docs/api/overview-summary.html


## JDK 21 Early-Access builds

The latest early-access, i.e., builds 15 are available [16], and are provided under the GNU General Public License v2, with the Classpath Exception.
The Release Notes are available here [17].

[16] https://jdk.java.net/21/
[17] https://jdk.java.net/21/release-notes

### Changes in recent builds that may be of interest:

JDK 21 build 15
- JDK-8303018: Unicode Emoji Properties
- JDK-8298469: Obsolete legacy parallel class loading workaround for non-parallel-capable class loaders
- JDK-8191565: Last-ditch Full GC should also move humongous objects
- JDK-8292818: replace 96-bit representation for field metadata with variable-sized streams - JDK-8304303: implement VirtualThread class notifyJvmti methods as C2 intrinsics
- JDK-8303648: Add String.indexOf(String str, int beginIndex, int endIndex)
- JDK-8304139: Add <init> and <clinit> method constants to ConstantDescs
- JDK-8015831: Add lint check for calling overridable methods from a constructor

JDK 21 build 14:
- JDK-8303410: Remove ContentSigner APIs and jarsigner -altsigner and -altsignerpath options
- JDK-8302659: Modernize Windows native code for NetworkInterface
- JDK-8298966: Deprecate JMX Subject Delegation and the method JMXConnector.getMBeanServerConnection(Subject) for removal.
- JDK-8294982: Implementation of Classfile API
- JDK-8303820: Simplify type metadata

JDK 21 build 13:
- JDK-8303413: (fs) Ignore polling interval sensitivity modifiers in PollingWatchService - JDK-8303175: (fs) Deprecate com.sun.nio.file.SensitivityWatchEventModifier for removal - JDK-8295425: Match the default priv exp length between SunPKCS11 and other JDK providers - JDK-8303409: Add Windows AArch64 ABI support to the Foreign Function & Memory API
- JDK-8302590: Add String.indexOf(int ch, int fromIndex, int toIndex)

JDK 21 build 12:
- JDK-8301119: Support for GB18030-2022
- JDK-8026369: javac potentially ambiguous overload warning needs an improved scheme
- JDK-8293667: Align jlink's --compress option with jmod's --compress option
- JDK-8282319: java.util.Locale method to stream available Locales

JDK 21 build 11:
- JDK-8302385: Remove MetaspaceReclaimPolicy=none
- JDK-8300575: JVMTI support when using alternative virtual thread implementation
- JDK-8301992: Embed SymbolTable CHT node
- JDK-8301749: Tracking malloc pooled memory size

JDK 21 build 10:
- JDK-8301700: Increase the default TLS Diffie-Hellman group size from 1024-bit to 2048-bit - JDK-8301260: Add system property to toggle XML Signature secure validation mode - JDK-8297632: InputStream.transferTo() method should specify what the return value should be when the number of bytes …
- JDK-8245654: Add Certigna Root CA
- JDK-8301819: Enable continuations code by default
- JDK-8300914: Allow `@` as an escape in documentation comments
- JDK-8225409: G1: Remove the Hot Card Cache


## JavaFX 21 Early-Access Builds

These are early access builds of the JavaFX 21 Runtime, built from openjdk/jfx [18]. It is intended to allow JavaFX application developers to build and test their applications with JavaFX 21 on JDK 21.

The latest builds 9 (2023/3/20) are now available [19] and are provided under the GNU General Public License, version 2, with the Classpath Exception.
Please report feedback on the openjfx-dev mailing list [20].

[18] https://github.com/openjdk/jfx
[19] https://jdk.java.net/javafx21/
[20] http://mail.openjdk.org/mailman/listinfo/openjfx-dev


## New Generational ZGC Early-Access Builds

The latest builds 21-genzgc+5-33 (2023/3/9) are available [21]. These open-source binaries of Generational ZGC [22] are based on an incomplete version of JDK 21 and are provided under the GNU General Public License, version 2, with the Classpath Exception.
Please send feedback on the zgc-dev mailing list [23].

[21] https://jdk.java.net/genzgc/
[22] https://openjdk.org/jeps/439
[23] http://mail.openjdk.org/mailman/listinfo/zgc-dev


## Topics of Interest:

The Arrival of Java 20!
https://inside.java/2023/03/21/the-arrival-of-java-20/

Video: Java First. Java Always. | Level Up Keynote
https://inside.java/2023/03/22/levelup-keynote/

Video: Java 20 Unboxing - Inside Java Newscast
https://inside.java/2023/03/23/newscast-44/

JDK 20 Security Enhancements
https://seanjmullan.org/blog/2023/03/22/jdk20

G1/Parallel/Serial GC improvements in JDK 20
https://tschatzl.github.io/2023/03/14/jdk20-g1-parallel-gc-changes.html

Podcast: “Preview Features: A Look Back and A Look Ahead” with Alex Buckley
https://inside.java/2023/03/21/podcast-030/

Video: Write performant Java code with the Vector API - JEP Café
https://inside.java/2023/03/14/jepcafe18/

Video: Data-Oriented Programming in Java
https://inside.java/2023/03/09/data-oriented-programming/

Video: ZGC - Java’s Highly Scalable Low-Latency Garbage Collector
https://inside.java/2023/03/05/stackwalker-01/

Video: The Holy Grail of Java Performance - Inside Java Newscast
https://inside.java/2023/03/02/newscast-43/

Video: Programmer's Guide to JDK Flight Recorder
https://inside.java/2023/02/27/programmer-guide-to-jfr/

Video: Foreign Function & Memory API Live
https://inside.java/2023/02/16/ffm-api/

JEP targeted to JDK 21: 430: String Templates (Preview)
https://openjdk.org/jeps/430

JEP targeted to JDK 21: 431: Sequenced Collections
https://openjdk.org/jeps/431


~

Thanks for participating in the OpenJDK Quality Outreach program. And as always, if you find an issue, please let us know through the usual channels.

--
David



Back to the top