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