On Mon, 28 Apr 2025 05:28:58 GMT, Ioi Lam <ik...@openjdk.org> wrote:

>> src/hotspot/share/cds/aotReferenceObjSupport.cpp line 106:
>> 
>>> 104:     assert(CDSConfig::allow_only_single_java_thread(), "Required");
>>> 105: 
>>> 106:     TempNewSymbol method_name = 
>>> SymbolTable::new_symbol("prepareForAOTCache");
>> 
>> I'm slightly uncomfortable with using the same method name 
>> (`prepareForAOTCache`) on MethodType and on ReferenceKeyMap & 
>> ReferenceKeySet as they have different expected use cases.  The one on MT is 
>> the "front door" the VM calls to remove stale Reference objects while the 
>> RKMap/RKSet are internal mechanisms that the VM would never call except for 
>> MT triggering it.
>> 
>> Does it make sense to use different names for these methods?  The MT one is 
>> a hook that could be extended to other classes to prepare them for cache 
>> creation while we wouldn't treat the RKMap/RKSet ones in the same way.  
>> Maybe append "_internal" or "_helper" to the RFMap/Set methods to 
>> distinguish them?
>
> In my mind, `MethodType::prepareForAOTCache()` makes sure all data used by 
> `MethodType` are ready to be cached. `ReferenceKeySet::prepareForAOTCache()` 
> does the same for this particular `ReferenceKeySet` instance.
> 
> Potentially we could have
> 
> 
> class MethodType {
>     static void prepareForAOTCache() {
>         table1.prepareForAOTCache();
>         table2.prepareForAOTCache();
>         ....
>     }
> }
> 
> 
> We can have many levels of `prepareForAOTCache()` calls where each level 
> delegates the operations to its sub-components. There are no obvious 
> "frontend/backend" or "interface/implementation" boundaries.

We're creating a set of hooks - right now, there is one in MT - that are called 
by the VM at the appropriate time during the assembly phase to massage the 
class's state before we write the AOTCache out.

Conceptually any class could have a `prepareForAOTCache` method that would act 
as a front door for the VM to know how to set up its state.  

Right now we have a hard coded list of one class - MT - that we call 
`prepareForAOTCache` on.  Another way to implement this would be to loop 
through all classes that AOTCache candidates and call their 
`prepareForAOTCache` method (fi they have one).

If we expand this beyond MT, how does a reader of the code know which classes 
have VM call-in points and which don't?

(I'll mention here I missed the static modifier was only on MT which changes 
the argument a little but I still think different names would be clearer to 
diffierntiate between what the VM is expected to call and what may happen to 
the instances)

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

PR Review Comment: https://git.openjdk.org/jdk/pull/24757#discussion_r2063590811

Reply via email to