On Wed, 14 May 2025 06:16:15 GMT, Ioi Lam <ik...@openjdk.org> wrote: >> 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 `JAVA_AOT_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). > > Ioi Lam has updated the pull request incrementally with two additional > commits since the last revision: > > - java.md updates from @rose00 > - Resolved differences with CSR JDK-8356010
Few comments. src/hotspot/share/cds/cds_globals.hpp line 123: > 121: product(ccstr, AOTCacheOutput, nullptr, > \ > 122: "Write AOT cache into this file (overrides AOTCache when " > \ > 123: "writing)") > \ This looks not complete description. And "override AOTCache .." is confusing. src/hotspot/share/cds/metaspaceShared.cpp line 1150: > 1148: print_java_launcher(&ss); > 1149: const char* cmd = ss.freeze(); > 1150: tty->print_cr("Launching child process %s to assemble AOT cache %s > using configuration %s", cmd, AOTCacheOutput, AOTConfiguration); I noticed that AOT produces outputs on TTY like this unconditionally. I think it is fine for development but for production we should use UL I think. Was this discussed? src/hotspot/share/runtime/arguments.cpp line 3060: > 3058: } > 3059: > 3060: static JavaVMOption* get_last_aotmode_arg(const JavaVMInitArgs* args) { I don't like that we pollute `Arguments` code with AOT specific flags processing. Can we move this into `CDSConfig`? Both these 2 new methods. But I will agree if you want to keep it here. It is not critical. src/java.base/share/man/java.md line 4141: > 4139: mode should be used only as a "fail-fast" debugging aid to check > if your command-line > 4140: options are compatible with the AOT cache. An alternative is to > run your application with > 4141: `-XX:AOTMode=auto -Xlog:cds,aot` to see if the AOT cache can be > used or not. `-Xlog:aot` test/hotspot/jtreg/runtime/cds/appcds/aotFlags/AOTFlags.java line 166: > 164: "-XX:-AOTClassLinking", > 165: "-XX:AOTConfiguration=" + aotConfigFile, > 166: "-Xlog:cds=debug", `-Xlog:aot` I assume JDK-8356595: "Convert -Xlog:cds to -Xlog:aot " will be pushed first. ------------- PR Review: https://git.openjdk.org/jdk/pull/24942#pullrequestreview-2840679467 PR Review Comment: https://git.openjdk.org/jdk/pull/24942#discussion_r2089234532 PR Review Comment: https://git.openjdk.org/jdk/pull/24942#discussion_r2089261456 PR Review Comment: https://git.openjdk.org/jdk/pull/24942#discussion_r2089267274 PR Review Comment: https://git.openjdk.org/jdk/pull/24942#discussion_r2089274796 PR Review Comment: https://git.openjdk.org/jdk/pull/24942#discussion_r2089279429