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-L194
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 it's behavior is hard to understand.
To move towards the AOT Cache Snapshot Model (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) */.
https://github.com/openjdk/jdk/blob/1bbbce75c5e68429c2a32519eb3c36d964dcdf57/src/hotspot/share/cds/heapShared.cpp#L168-L194
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 it's behavior is hard to understand.
To move towards the AOT Cache Snapshot Model (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) */.
- causes
-
JDK-8373983 java/util/Locale/UseOldISOCodesTest.java fails with JTREG_AOT_JDK=onestep
-
- Resolved
-
- relates to
-
JDK-8365645 AOT Cache Snapshot Model
-
- Open
-
- links to
-
Commit(master)
openjdk/jdk/232b41b2
-
Review(master)
openjdk/jdk/28736