Integrated: 8256368: Avoid repeated upcalls into Java to re-resolve MH/VH linkers/invokers
Vladimir Ivanov
vlivanov at openjdk.java.net
Mon Feb 14 12:01:13 UTC 2022
On Thu, 10 Feb 2022 16:57:30 GMT, Vladimir Ivanov <vlivanov at openjdk.org> wrote:
> It's another attempt to fix JDK-8256368 (previous one was #1453).
>
> @coleenp raised a question about resolution failure case (`indy_resolution_failed()`) and after a closer look it turned out the logic is broken there.
>
> After thinking more about it, I decided to completely drop resolution failure case handling and always perform re-resolution.
> For MethodHandle/VarHandle invokers resolution failure is very uncommon, so going through re-resolution step seems well-justified.
>
> Original description:
>
> Method linkage of invokehandle instructions involve an upcall into Java
> (MethodHandleNatives::linkMethod), but the result is not cached. Unless the
> upcall behaves idempotently (which is highly desirable, but not guaranteed),
> repeated invokehandle resolution attempts enter a vicious cycle in tiered mode:
> switching to a higher tier involves call site re-resolution in generated code,
> but re-resolution installs a fresh method which puts execution back into
> interpreter.
>
> (Another prerequisite is no inlining through a invokehandle which doesn't
> normally happen in practice - relevant methods are marked w/ @ForceInline -
> except some testing modes, -Xcomp in particular.)
>
> Proposed fix is to inspect ConstantPoolCache first. Previous resolution
> attempts from interpreter and C1 records their results there and it stabilises
> the execution.
>
> Testing: hs-tier1 - hs-tier4
This pull request has now been integrated.
Changeset: 534e5578
Author: Vladimir Ivanov <vlivanov at openjdk.org>
URL: https://git.openjdk.java.net/jdk/commit/534e557874274255c55086b4f6128063cbd9cc58
Stats: 47 lines in 5 files changed: 22 ins; 12 del; 13 mod
8256368: Avoid repeated upcalls into Java to re-resolve MH/VH linkers/invokers
Reviewed-by: dlong, kvn
-------------
PR: https://git.openjdk.java.net/jdk/pull/7429
More information about the hotspot-compiler-dev
mailing list