RFR: 8350209: Preserve adapters in AOT cache [v3]
Vladimir Kozlov
kvn at openjdk.org
Fri Apr 18 18:10:22 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.
Vladimir Kozlov has updated the pull request incrementally with one additional commit since the last revision:
AOT code flags are ignored when AOTCache is not specified. Set range for AOTCodeMaxSize values.
-------------
Changes:
- all: https://git.openjdk.org/jdk/pull/24740/files
- new: https://git.openjdk.org/jdk/pull/24740/files/43517ebf..ed37319b
Webrevs:
- full: https://webrevs.openjdk.org/?repo=jdk&pr=24740&range=02
- incr: https://webrevs.openjdk.org/?repo=jdk&pr=24740&range=01-02
Stats: 9 lines in 2 files changed: 7 ins; 0 del; 2 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