On Sun, 31 Aug 2025 18:49:20 GMT, Ioi Lam <[email protected]> wrote:

>> java.lang.invoke has a few Holder classes in DirectMethodHandle, 
>> DelegatingMethodHandle, Invokers, and LambdaForm.
>> 
>> Currently, the comments simply refer to "Placeholder for xxx generated 
>> ahead-of-time".
>> 
>> However, they carry executed bytecode and show up in flame graphs. The 
>> current comments are definitely not sufficient for their details and 
>> purposes.
>> 
>> To address these shortcomings, I improved the comments on the Holder classes 
>> and GenerateJLIClassesHelper to briefly describe the generation process. In 
>> addition, I improved the comments on BoundMethodHandle to provide a more 
>> efficient overview.
>
> src/java.base/share/classes/java/lang/invoke/GenerateJLIClassesHelper.java 
> line 66:
> 
>> 64: ///
>> 65: /// Currently, `GenerateJLIClassesPlugin` and the AOT process 
>> pre-generate with
>> 66: /// `GenerateJLIClassesHelper`. `GenerateJLIClassesPlugin` runs for JDK 
>> builds;
> 
> How about:
> 
> 
> // Currently, `GenerateJLIClassesHelper` is invoked by 
> `GenerateJLIClassesPlugin` when 
> // creating a modular JDK image. It it also invoked when generating an AOT 
> cache.
> 
> 
> ("Creating a modular JDK image" covers both the case when the JDK is built, 
> or when you use jlink to create a custom JDK image).

I think we can add the following to tie the difference pieces together.


// When creating a modular JDK image, the generation of the Holder and Species 
classes
// are controlled by the file 
`jdk/tools/jlink/internal/plugins/default_jli_trace.txt` in
// `$JAVA_HOME/lib/modules`. `default_jli_trace.txt` itself is generated in the 
build
// process of the JDK.
//
// To list all the Species classes in a JDK image
//
// jimage list $JAVA_HOME/lib/modules | grep MethodHandle.Species
//
// The following 4 classes are also generated by `GenerateJLIClassesHelper`
//  -  java.lang.invoke.Invokers$Holder
//  -  java.lang.invoke.DirectMethodHandle$Holder
//  -  java.lang.invoke.DelegatingMethodHandle$Holder
//  -  java.lang.invoke.LambdaForm$Holder
//
// When creating an AOT cache, information for generating the Holder and 
Species classes
// are captured and stored inside the AOT configuration file (with similar data 
as captured
// in the `default_jli_trace.txt` file), and are accessed with the C++ 
`FinalImageRecipes` class.


I think just mentioning `FinalImageRecipes` is enough. For people who want to 
dig deeper, they
can read up the implementation of `FinalImageRecipes`.

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

PR Review Comment: https://git.openjdk.org/jdk/pull/27010#discussion_r2312590058

Reply via email to