RFR: 8373392: Replace CDS object subgraphs with @AOTSafeClassInitializer

Ioi Lam iklam at openjdk.org
Wed Dec 10 09:39:58 UTC 2025


In legacy CDS, Java objects used by certain classes are computed ahead of time using "object subgraphs"

https://github.com/openjdk/jdk/blob/1bbbce75c5e68429c2a32519eb3c36d964dcdf57/src/hotspot/share/cds/heapShared.cpp#L168-L171

Examples of subgraphs:

- `java.lang.Integer$IntegerCache::cache`
- `jdk.internal.module.ArchivedBootLayer::bootLayer`

The implementation requires special code (in both Java and C++) to be executed when a CDS archive is created or loaded. As a result, we have an execution model that's difficult to implement/extend and the behavior is hard to understand.

To move towards the AOT Cache Snapshot Model ([JDK-8365645](https://bugs.openjdk.org/browse/JDK-8365645)) we should replace the subgraphs with the use of `@AOTSafeClassInitializer`, and if necessary, `@AOTRuntimeSetup`. This will simplify the current implementation, and make it possible to extend AOT-initializations to more core classes.

Note, the use of `@AOTSafeClassInitializer` requires `-XX:+AOTClassLinking`. For the time being, we retain the old CDS object subgraph code to cover the `-XX:-AOTClassLinking` cases. Such code will be marked with comments like `/* Legacy CDS archive support (to be deprecated) */`. All future AOT creation of Java objects will be done with  `@AOTSafeClassInitializer`.

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

Commit messages:
 - 8373392: Replace CDS object subgraphs with @AOTSafeClassInitializer

Changes: https://git.openjdk.org/jdk/pull/28736/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=28736&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8373392
  Stats: 602 lines in 29 files changed: 368 ins; 186 del; 48 mod
  Patch: https://git.openjdk.org/jdk/pull/28736.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/28736/head:pull/28736

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


More information about the security-dev mailing list