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

Reply via email to