On Tue, 23 Sep 2025 22:10:53 GMT, Ioi Lam <[email protected]> wrote: >> This is an alternative to https://github.com/openjdk/jdk/pull/27024. Thanks >> to @ashu-mehra for the suggestion. >> >> ### Background: >> >> The AOT Assembly Phase is in essence a small Java program that executes a >> limited set of Java bytecodes. This program bootstraps the module system, >> loads classes, and performs certain ahead-of-time optimizations such as >> resolving `invokedynamic` call sites. >> >> As a side effect of Java program execution, a small set of Java classes are >> initialized in the Assembly Phase. >> >> Since [JDK-8360163](https://bugs.openjdk.org/browse/JDK-8360163), if a class >> `X` is annotated with `@AOTSafeClassInitializer` *and* is initialized in the >> Assembly Phase, then `X` will be stored in the AOT cache in the >> "initialized" state. When the AOT cache is used in the Production Run, >> `X::<clinit>` will not be executed, and the static variables of `X` will be >> available upon JVM bootstrap. >> >> ### Problem: >> >> The Assembly Phase doesn't touch many classes that may benefit from >> `@AOTSafeClassInitializer`. For example, >> `jdk.internal.math.MathUtils::<clinit>` creates a few large tables. Caching >> `MathUtils` in the "initialized" state will improve start-up time. However, >> since no bytecodes executed by the Assembly Phase use `MathUtils`. it will >> not be initialized. >> >> ### Fix: >> >> If a class `X` has the `@AOTSafeClassInitializer` annotation *and* was >> initialized in the AOT Training Run, the JVM will proactively initialize `X` >> in the Assembly Phase. This will ensure that `X` will be cached in the >> "initialized" state. >> >> As a proof of concept, `@AOTSafeClassInitializer` is added to `MathUtils`. >> `@AOTSafeClassInitializer` will be added to more classes in future RFEs. > > Ioi Lam has updated the pull request with a new target base due to a merge or > a rebase. The incremental webrev excludes the unrelated changes brought in by > the merge/rebase. The pull request contains six additional commits since the > last revision: > > - Exclude new test from hotspot_aot_classlinking and hotspot_appcds_dynamic > test groups > - @adinn and @liach comments > - Merge branch 'master' into > 8368174-proactive-init-aot-safe-class-initializer > - updated javadoc for AOTSafeClassInitializer.java > - Fix > - imported
Marked as reviewed by liach (Reviewer). ------------- PR Review: https://git.openjdk.org/jdk/pull/27402#pullrequestreview-3264702460
