RFR: 8355003: Implement Ahead-of-Time Method Profiling [v13]

Chris Plummer cjplummer at openjdk.org
Tue May 6 18:51:18 UTC 2025


On Tue, 6 May 2025 06:31:43 GMT, Igor Veresov <iveresov at openjdk.org> wrote:

>> Improve warm-up time by making profile data from a previous run of an application instantly available, when the HotSpot Java Virtual Machine starts. Specifically, enhance the [AOT cache](https://openjdk.org/jeps/483) to store method execution profiles from training runs, reducing profiling delays in subsequent production runs.
>> 
>> More details in the JEP: https://bugs.openjdk.org/browse/JDK-8325147
>
> Igor Veresov has updated the pull request with a new target base due to a merge or a rebase. The pull request now contains 43 commits:
> 
>  - Merge branch 'master' into pp2
>  - Fix compile
>  - Fix additional issues
>  - Make sure command line flags that affect MDO layout are consistent
>  - Fix semantics change from the previous commit
>  - Port 8355915: [leyden] Crash in MDO clearing the unloaded array type
>  - Fix flag behavior
>  - Fix log tags
>  - Remove the proxy class counter
>  - Address review comments part 2
>  - ... and 33 more: https://git.openjdk.org/jdk/compare/e09d2e27...7d22a42a

src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/memory/FileMapInfo.java line 129:

> 127:     metadataTypeArray[5] = db.lookupType("InstanceStackChunkKlass");
> 128:     metadataTypeArray[6] = db.lookupType("Method");
> 129:     metadataTypeArray[9] = db.lookupType("MethodData");

It looks like MethodData inheriting from Metadata is not a new change, but has always been the case. I'm surprised this didn't cause any test failures before your changes. Did you end up with test failures after your changes?

src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/Threads.java line 154:

> 152:         if (!VM.getVM().isCore()) {
> 153:             virtualConstructor.addMapping("CompilerThread", CompilerThread.class);
> 154:             virtualConstructor.addMapping("TrainingReplayThread", TrainingReplayThread.class);

The new SA TrainingReplayThread class is not needed since it only overrides isHiddenFromExternalView() to return true. You can instead use HiddenJavaThread.class here.

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

PR Review Comment: https://git.openjdk.org/jdk/pull/24886#discussion_r2076064357
PR Review Comment: https://git.openjdk.org/jdk/pull/24886#discussion_r2076058595


More information about the hotspot-runtime-dev mailing list