JDK 27 Rampdown Phase Closing - Default G1 in All Environments

"David Delabassee via dev" <[email protected]> Tue, 28 Jul 2026 09:11:01 +0000
Newsgroups gmane.comp.jakarta.commons.devel
Message-ID <SJ0PR10MB548854F48F725269C7F47507FCCB2@SJ0PR10MB5488.namprd10.prod.outlook.com>
--_000_SJ0PR10MB548854F48F725269C7F47507FCCB2SJ0PR10MB5488namp_
Content-Type: text/plain; charset="Windows-1252"
Content-Transfer-Encoding: quoted-printable

Welcome to the OpenJDK Quality Outreach summer update!


Everything is on track for the general availability of Java 27 on 15 Septem=
ber, as JDK 27 is now in Rampdown Phase 2, meaning that only low-risk enhan=
cements may still be considered. The first release candidate builds of JDK =
27 are expected in just over a week, once RDP2 concludes. This also means t=
hat the window for testing your projects with JDK 27 has almost closed. If =
you haven=92t done so, now is a good time to start testing your projects us=
ing the JDK 28 early-access builds.

Also of note, G1 is becoming the default garbage collector across all envir=
onments in JDK 27. Make sure to check the Heads-Up below for more details.

I=92ll conclude by highlighting two non-technical resources that are nevert=
heless highly recommended: the Java documentary [1] and an episode of the I=
nside Java podcast [2] discussing JEPs and how critical they are to the evo=
lution of the platform.

[1] https://inside.java/2026/07/18/the-java-documentary/
[2] https://inside.java/2026/06/25/podcast-060/


# Heads-up - JDK 27: Default G1 in All Environments

In situations where no garbage collector is specified on the command line, =
the HotSpot JVM used to select either G1 GC or Serial GC, depending on the =
environment. It preferred G1, but due to Serial's past throughput and footp=
rint advantages in constrained environments, the JVM would select the latte=
r if only a single CPU or less than 1792 MB of physical memory was detected=
.

Recent work has made G1 competitive with Serial in those environments. Gene=
rally speaking, G1 will have similar native memory overhead, slightly lower=
 throughput, and lower maximum latencies than Serial. To make it easier to =
reason about the JVM's behavior, starting with JDK 27, it picks G1 as defau=
lt garbage collector in all environments.

This change:

- does not remove Serial GC from the JDK, which remains available in situat=
ions where its performance characteristics are preferable
- does not interfere with applications that select a specific garbage colle=
ctor on the command line
- does not interfere with applications that run in environments with multip=
le CPUs and more than 1792 MB of memory

That means an application is affected by this change only if it runs in a c=
onstrained environment and does not explicitly select a garbage collector. =
In such cases, we recommend benchmarking the application with different GCs=
 to identify the one that best suits its needs. If that is not possible, th=
e application can either use G1 as the new default or be configured to use =
Serial to ensure that its GC-related performance characteristics remain unc=
hanged.

For more information, please check JEP 523 [3].

[3] https://openjdk.org/jeps/523


# Heads-up - JDK 28: New jlink Keystore plugin

A new `jlink` plugin has been introduced in JDK 28. It allows users to spec=
ify which CA certificates should be included in the `cacerts` keystore of a=
 custom runtime image. This is useful for creating runtime images that cont=
ain only the CA certificates required by the applications that use those im=
ages. The command-line option accepts one or more `cacerts` keystore aliase=
s, separated by commas.

For more details, see [4].

[4] https://bugs.openjdk.org/browse/JDK-8377102


# JDK 27 Early-Access Builds

The JDK 27 early-access builds for Build 32 are now available [5], along wi=
th the corresponding release notes [6].

[5] https://jdk.java.net/27/
[6] https://jdk.java.net/27/release-notes

## JEPs integrated into JDK 27:

- JEP 523: Make G1 the Default Garbage Collector in All Environments
- JEP 527: Post-Quantum Hybrid Key Exchange for TLS 1.3
- JEP 531: Lazy Constants (3rd Preview)
- JEP 532: Primitive Types in Patterns, instanceof, and switch (5th Preview=
)
- JEP 533: Structured Concurrency (7th Preview)
- JEP 534: Compact Object Headers by Default
- JEP 536: JFR In-Process Data Redaction
- JEP 537: Vector API (12th Incubator)
- JEP 538: PEM Encodings of Cryptographic Objects (3rd Preview)

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

- JDK-8381812: The synthetic $deserializeLambda$ is notably bigger [Reporte=
d by Eclipse Collections]
- JDK-8382582: Remove the experimental JVMCI feature
- JDK-8373426: Remove ffdhe6144 and ffdhe8192 from default list of TLS name=
d groups
- JDK-8385957: JFR: Sensitive command-line arguments still in environment v=
=85
- JDK-8381796: Enhance Certificate parsing
- JDK-8368041: Enhance TLS certificate handling
- JDK-8377833: Enhance Jar file processing
- JDK-8380672: Improve certification checking
- JDK-8360700: Implement JEP 534: Compact Object Headers by Default
- JDK-8296183: jndiprovider.properties contains properties pointing to non-=
existing classes
- JDK-8378464: PixelInterleavedSampleModel constructors and methods do not =
specify behavior =85
- JDK-8374348: Implement -XX:AOTMode=3Drequired as alias for -XX:AOTMode=3D=
on
- JDK-8382031: Update IANA Language Subtag Registry to Version 2026-05-05
- JDK-8357439: Add bash autocompletion for jcmd
- JDK-8329548: Change KeyUpdate messages from TLS 1.3
- JDK-8386466: DESedeKeySpec.isParityAdjusted spec permits 8-byte key but R=
I throws InvalidKeyException

Note: A more exhaustive list of changes can be found here [7].

[7] https://github.com/openjdk/jdk/compare/jdk-27+22...jdk-27+32


# JDK 28 Early-Access Builds

The JDK 28 early-access builds 8 are now available [8] for testing. You can=
 review the Release Notes here [9].

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

- JDK-8385957: JFR: Sensitive command-line arguments still in environment v=
=85
- JDK-8384557: Allow configuration of the JVM's temporary directory on Linu=
x
- JDK-8301626: Capture Named Group information in TLSHandshakeEvent
- JDK-8374058: Enhance JPEG handling
- JDK-8387123: Remove LuxTrust Global Root CA
- JDK-8386200: ListFormat incorrectly escapes single quotes
- JDK-8385834: Tighten ListFormat.getInstance(String[]) behavior for invali=
d placeholders
- JDK-8377102: New jlink plugin to specify the specific CA certificates to =
include in =85
- JDK-6356745: (coll) Add PriorityQueue(Collection, Comparator)
- JDK-8385304: X25519 should utilize aarch64 intrinsics
- JDK-8380549: HttpCookie.expiryDate2DeltaSeconds returns 0 on parse failur=
e, causing =85
- JDK-8376748: Emit runtime warnings for JCE algorithms that will be disabl=
ed
- JDK-8386322: Float16Vector.toString should render lane values using Float=
16.toString
- JDK-8387377: Compilation is very slow when --module-path contains many Au=
tomatic Modules =85

Note: A more exhaustive list of changes can be found here [10].

[8] https://jdk.java.net/28/
[9] https://jdk.java.net/28/release-notes
[10] https://github.com/openjdk/jdk/compare/jdk-28+0...jdk-28+7


# JavaFX 27 Early-Access Builds

The latest early-access builds of JavaFX 27 are available [11], along with =
the corresponding JavaFX 27 Javadocs [12]. These EA builds enable JavaFX de=
velopers to build and test their applications with JavaFX 27 on JDK 27. Alt=
hough they are designed to work with JDK 27-ea, they are also known to work=
 with JDK 25 and later releases.

[11] https://jdk.java.net/javafx27/
[12] https://download.java.net/java/early_access/javafx27/docs/api/overview=
-summary.html


# Topics of Interest

- Java - The Documentary
https://inside.java/2026/07/18/the-java-documentary/

- =93How JEPs Drive Java's Evolution=94 - Inside Java Podcast
https://inside.java/2026/06/25/podcast-060/

- =93JDK 27 + Valhalla, Now!=94 - Inside Java Podcast
https://inside.java/2026/07/19/podcast-062/

- =93Scripting JS and Python with Project Detroit=94 - Inside Java Podcast
https://inside.java/2026/07/09/podcast-061/

- Identifying JDK Value Class Candidate
https://mail.openjdk.org/archives/list/[email protected]/thread/Y72=
NRXM7KYBX43OKYBQMVKOZDWKG4MHS

- SIMD Vectors in the HotSpot JVM - Auto Vectorization and the Vector API
https://inside.java/2026/07/02/simd-vectors-hotspot-jvm/

- ZGC: A Decade of Redefining Java Performance
https://inside.java/2026/06/30/zgc-performance-decade/

- Better Tools for Immutable Data
https://inside.java/2026/06/21/better-tools-immutable-data/

- Performance Improvements in JDK 26
https://inside.java/2026/06/09/jdk-26-performance-improvements/

- Java Next Language Features
https://inside.java/2026/06/07/java-next-language-features/

- =93Java *is* Memory Efficient=94 - Inside Java Podcast
https://inside.java/2026/05/28/podcast-059/

~


As always, if you encounter any issues while running your project on JDK ea=
rly-access builds, please feel free to reach out.

P.S. If you would prefer not to receive future OpenJDK Quality Outreach upd=
ates, just let me know.

--David

--_000_SJ0PR10MB548854F48F725269C7F47507FCCB2SJ0PR10MB5488namp_--