> [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: Removed unused AOTCodeSection class ------------- Changes: - all: https://git.openjdk.org/jdk/pull/24740/files - new: https://git.openjdk.org/jdk/pull/24740/files/544a4aa8..43517ebf Webrevs: - full: https://webrevs.openjdk.org/?repo=jdk&pr=24740&range=01 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=24740&range=00-01 Stats: 7 lines in 1 file changed: 0 ins; 7 del; 0 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