RFR: 8348426: Generate binary file for -XX:AOTMode=record -XX:AOTConfiguration=file [v2]
Vladimir Kozlov
kvn at openjdk.org
Wed Feb 12 15:31:09 UTC 2025
On Wed, 12 Feb 2025 08:13:02 GMT, Ioi Lam <iklam at openjdk.org> wrote:
>> Currently, with `java -XX:AOTMode=record -XX:AOTConfiguration=file ...`, a text file is written. The file contains the names of loaded classes, indices of resolved constant pools entries, etc, that are easily represented in text.
>>
>> With the upcoming 2nd JEP of the Leyden project, [JDK-8325147](https://bugs.openjdk.org/browse/JDK-8325147) (Ahead-of-Time Method Profiling), the AOT config file needs to record complex data structures that are difficult to represent in text (we would need code for serializing hierarchical data structures to/from text). Also, a next step after [JDK-8325147](https://bugs.openjdk.org/browse/JDK-8325147) would be to support hidden classes that have no predictable names. Representing such classes with textual names would become another challenge.
>>
>> To prepare for [JDK-8325147](https://bugs.openjdk.org/browse/JDK-8325147), this PR writes the AOT configuration file in a **binary format** (essentially the same format as a CDS archive file). This allows arbitrary data associated with the cached classes to be processed and stored using the existing `MetaspaceClosure` API (which can recursively copy C++ objects). Such a change in the file format is allowed by [JEP 483](https://openjdk.org/jeps/483):
>>
>>> the format of the configuration and cache files is not specified and is subject to change without notice.
>>
>> **Notes for reviewers:**
>>
>> - Although the new config file format is essentially the same as a CDS "static" archive, for sanity, we use a different magic number so that the config file cannot be accidentally used as a CDS archive. See new tests inside AOTFlags.java.
>> - After this PR, the CDS "static" archive can be dumped in three modes: "classic", "preimage", and "final". See new comments in cdsConfig.hpp.
>> - The main starting point of this PR is `CDSConfig::check_aot_flags()` - it checks the existence of `-XX:AOTConfiguration` and `-XX:AOTMode` to configure the JVM to dump the CDS "preimage" or "final" archives as necessary.
>> - Most of the other changes are checks for `CDSConfig::is_dumping_preimage_static_archive()` and `CDSConfig::is_dumping_final_static_archive()` to handle subtlle differences between the different dumping modes.
>> - I also updated the UL messages to use the new JEP 483 terminology ("AOT cache", "AOT configuration file", etc) when JEP 483 options are specified.
>
> Ioi Lam has updated the pull request incrementally with two additional commits since the last revision:
>
> - Update "make test JTREG_AOT_JDK=true ..." to work with binary AOT configuration
> - Fixed test failures
tools/javac/ImplicitClass/ImplicitImports.java failed in GHA:
[0.002s][warning][cds] Unable to use AOT cache: CDS is disabled when java.base module is patched.
Hello, World!
Exception running test testImplicitSimpleIOImport: java.lang.AssertionError: Incorrect Output, expected: [Hello, World!], actual: [[0.002s][warning][cds] Unable to use AOT cache: CDS is disabled when java.base module is patched., Hello, World!]
java.lang.AssertionError: Incorrect Output, expected: [Hello, World!], actual: [[0.002s][warning][cds] Unable to use AOT cache: CDS is disabled when java.base module is patched., Hello, World!]
at ImplicitImports.testImplicitSimpleIOImport(ImplicitImports.java:171)
-------------
PR Comment: https://git.openjdk.org/jdk/pull/23484#issuecomment-2654059225
More information about the hotspot-dev
mailing list