Replace CDS object subgraphs with @AOTSafeClassInitializer

XMLWordPrintable

    • b03

      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) */.

            Assignee:
            Ioi Lam
            Reporter:
            Ioi Lam
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

              Created:
              Updated:
              Resolved: