RFR: 8373392: Replace CDS object subgraphs with @AOTSafeClassInitializer
Chen Liang
liach at openjdk.org
Wed Dec 10 15:27:56 UTC 2025
On Wed, 10 Dec 2025 09:31:37 GMT, Ioi Lam <iklam at openjdk.org> wrote:
> 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`.
Is IntegerCache.cache the only field that need to be adjusted according to system properties after loading from AOT archive?
src/java.base/share/classes/java/util/ImmutableCollections.java line 80:
> 78: @AOTRuntimeSetup
> 79: private static void runtimeSetup() {
> 80: // to generate a reasonably random and well-mixed SALT, use an arbitrary
Suggestion:
// to generate a reasonably random and well-mixed SALT, use an arbitrary
-------------
PR Review: https://git.openjdk.org/jdk/pull/28736#pullrequestreview-3563043067
PR Review Comment: https://git.openjdk.org/jdk/pull/28736#discussion_r2607052565
More information about the security-dev
mailing list