Integrated: 8363986: Heap region in CDS archive is not at deterministic address

Ioi Lam iklam at openjdk.org
Wed Nov 19 05:08:36 UTC 2025


On Thu, 30 Oct 2025 05:46:49 GMT, Ioi Lam <iklam at openjdk.org> wrote:

> **Overview**
> 
> This PR fixes the problem where the JDK build is not reproducible because the `lib/server/classes*.jsa` files do not always put the heap objects at the same addresses. This bug affects only `+UseCompressedOops`.
> 
> This bug is in generic code and is not specific to any platform. We hadn't hit this bug because our build platforms always allocated the heap at the same location. However, this is no longer true with macOS 26, which puts the heap at random locations.
> 
> **The fix**
> 
> (1) In `ArchiveHeapWriter::init()`, we check if we need deterministic heap contents.
> 
> (2) In `ArchiveHeapWriter::set_requested_address_range()`, if deterministic heap contents are needed, we always put the archived heap objects to just below `0x100000000`, so that we always write the archived oops into the CDS archive with  zero-based, zero-shift encoding.
> 
> Please see comments in the above two functions for more details.

This pull request has now been integrated.

Changeset: 02ff38f2
Author:    Ioi Lam <iklam at openjdk.org>
URL:       https://git.openjdk.org/jdk/commit/02ff38f2d7f6abc0e4661e8226bc6780b7a11c3a
Stats:     142 lines in 7 files changed: 101 ins; 17 del; 24 mod

8363986: Heap region in CDS archive is not at deterministic address

Reviewed-by: kvn, asmehra

-------------

PR: https://git.openjdk.org/jdk/pull/28052


More information about the hotspot-runtime-dev mailing list