RFR: 8350209: Preserve adapters in AOT cache
Vladimir Kozlov
kvn at openjdk.org
Thu Apr 17 20:37:08 UTC 2025
[JEP 483](https://bugs.openjdk.org/browse/JDK-8315737) preserves class information in AOT cache which helps Java startup performance.
We should also preserve adapters (i2c, c2i) to further improve performance of class linking where adapters are generated.
Short running Java application can see several percents improvement. I got 6% improvement when ran `HelloWorld.java` on Linux-x64 Ice Lake CPU (2.5Ghz):
(perf stat -r 100 java -XX:AOTCache=app.aotcache -cp hello.jar HelloWorld > /dev/null) 2>&1 | grep elapsed
0.0299401 +- 0.0000504 seconds time elapsed ( +- 0.17% )
(perf stat -r 100 java -XX:AOTCache=app.aotcache -XX:+UnlockDiagnosticVMOptions -XX:-AOTAdapterCaching -cp hello.jar HelloWorld > /dev/null) 2>&1 | grep elapsed
0.0318654 +- 0.0000535 seconds time elapsed ( +- 0.17% )
New diagnostic flags are introduced (use `-XX:+UnlockDiagnosticVMOptions` to unlock them):
-XX:+AOTAdapterCaching - Enable or disable saving and restoring i2c2i adapters
-XX:AOTCodeMaxSize=10*M - buffer size in bytes for AOT code caching
-XX:+AbortVMOnAOTCodeFailure - Abort VM on the first occurrence of AOT code caching failure
By default `AOTAdapterCaching` is `false` and enabled ergonomically when `-XX:AOTCache` is specified.
Specifying this flag without using `AOTCache` will cause error during VM initialization:
java -XX:+UnlockDiagnosticVMOptions -XX:+AOTAdapterCaching -cp hello.jar HelloWorld
Error occurred during initialization of VM
AOTCache must be specified when using AOT code caching
To use AOT adapters follow process described in JEP 483:
java -XX:AOTMode=record -XX:AOTConfiguration=app.aotconf -cp app.jar App
java -XX:AOTMode=create -XX:AOTConfiguration=app.aotconf -XX:AOTCache=app.aot -cp app.jar
java -XX:AOTCache=app.aot -cp app.jar App
There are several new UL flag combinations to trace the AOT code caching process:
-Xlog:aot+codecache+init -Xlog:aot+codecache+exit -Xlog:aot+codecache+stubs
@ashu-mehra is main author of changes. He implemented adapters caching.
I did main framework (`AOTCodeCache` class) for saving and loading AOT code.
Tested tier1-6,10, which includes tests with `AOTClassLinking` enabled. Also Xcomp,stress and JCK.
-------------
Commit messages:
- 8350209: Preserve adapters in AOT cache
Changes: https://git.openjdk.org/jdk/pull/24740/files
Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=24740&range=00
Issue: https://bugs.openjdk.org/browse/JDK-8350209
Stats: 3148 lines in 46 files changed: 2679 ins; 200 del; 269 mod
Patch: https://git.openjdk.org/jdk/pull/24740.diff
Fetch: git fetch https://git.openjdk.org/jdk.git pull/24740/head:pull/24740
PR: https://git.openjdk.org/jdk/pull/24740
More information about the build-dev
mailing list