RFR: 8355798: Implement JEP 514: Ahead-of-Time Command Line Ergonomics

Ioi Lam iklam at openjdk.org
Mon May 5 00:29:19 UTC 2025


This is the implementation of the draft [JEP: Ahead-of-time Command Line Ergonomics](https://bugs.openjdk.org/browse/JDK-8350022)

- Implemented new flag `AOTCacheOutput`, which can be used to create an AOT cache using the "one-command workflow"
- Added processing of the `AOT_TOOL_OPTIONS` environment variable that can supply extra VM options when creating an AOT cache
- Added `%p` substitution for `AOTCache`, `AOTCacheOutput`, and `AOTConfiguration` options

Please see the [JEP](https://bugs.openjdk.org/browse/JDK-8350022) and [CSR](https://bugs.openjdk.org/browse/JDK-8356010) for detailed specification.

Examples:


# Create an AOT cache with a single command:
$ java -cp HelloWorld.jar -XX:AOTMode=record -XX:AOTCacheOutput=foo.aot HelloWorld
Hello World
Temporary AOTConfiguration recorded: foo.aot.config
Launching child process /usr/bin/java to assemble AOT cache foo.aot using configuration foo.aot.config
Picked up JAVA_TOOL_OPTIONS: -Djava.class.path=HelloWorld.jar -XX:AOTCacheOutput=foo.aot -XX:AOTConfiguration=foo.aot.config -XX:AOTMode=create
Reading AOTConfiguration foo.aot.config and writing AOTCache foo.aot
AOTCache creation is complete: foo.aot 10240000 bytes

# Create logging file for the AOT cache assembly phase
$ export AOT_TOOL_COMMAND=-Xlog:cds:file=log.txt
$ java -cp HelloWorld.jar -XX:AOTMode=record -XX:AOTCacheOutput=foo.aot HelloWorld


Note: the child process is launched with Java API because the HotSpot native APIs are not sufficient (no way to set env vars for child process).

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

Commit messages:
 - Remove %t restriction
 - Added %p substitution; clean up
 - Merge branch 'master' into 8355798-implement-leyden-ergo-jep-8350022
 - fixed typo
 - added comment that was removed in previous commit
 - Refactored code to enfore the order of argument parsing
 - 8355798: Implement JEP-JDK-8350022: Ahead-of-time Command Line Ergonomics

Changes: https://git.openjdk.org/jdk/pull/24942/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=24942&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8355798
  Stats: 1776 lines in 17 files changed: 1298 ins; 439 del; 39 mod
  Patch: https://git.openjdk.org/jdk/pull/24942.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/24942/head:pull/24942

PR: https://git.openjdk.org/jdk/pull/24942


More information about the core-libs-dev mailing list