RFR: 8369742: Link AOT-linked classes at JVM bootstrap

Vladimir Kozlov kvn at openjdk.org
Wed Oct 15 17:41:10 UTC 2025


On Tue, 14 Oct 2025 19:51:25 GMT, Ioi Lam <iklam at openjdk.org> wrote:

>> src/hotspot/share/cds/aotLinkedClassBulkLoader.cpp line 61:
>> 
>>> 59: //
>>> 60: // Note: we can't link the classes yet because SharedRuntime is not yet ready to generate adapters.
>>> 61: void AOTLinkedClassBulkLoader::preload_classes(JavaThread* current) {
>> 
>> Why we not ready for adapters? I see `SharedRuntime::init_adapter_library()` is called in from `init_globals()` and `preload_classes()` is called from `init_globals2()` when `universe2_init()` is called.
>> 
>> `SharedRuntime::init_adapter_library()` should populate table with AOT adapters.
>
> The current call sequence is:
> 
> - SharedRuntime::init_adapter_library()
> - AOTLinkedClassBulkLoader::preload_classes()
> - MethodHandles::generate_adapters()
> - AOTLinkedClassBulkLoader::link_classes()
> 
> Method linking calls `Interpreter::entry_for_method()` which looks up from `AbstractInterpreter::_entry_table`. However, this table is not yet initialized when `AOTLinkedClassBulkLoader::preload_classes()` is called. It's initialized inside `MethodHandles::generate_adapters()` which happens much later.
> 
> This table doesn't seem to be initialized by `SharedRuntime::init_adapter_library()`.

You are right, `MethodHandles::generate_adapters()` is called after `universe2_init()`.

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

PR Review Comment: https://git.openjdk.org/jdk/pull/27783#discussion_r2433447974


More information about the hotspot-dev mailing list