RFR: 8160821: VarHandle accesses are penalized when argument conversion is required [v8]

ExE Boss duke at openjdk.org
Tue Dec 9 11:36:00 UTC 2025


On Mon, 8 Dec 2025 18:26:19 GMT, Chen Liang <liach at openjdk.org> wrote:

>> src/java.base/share/classes/java/lang/invoke/IndirectVarHandle.java line 114:
>> 
>>> 112:         // but checking the signature type of MH mostly works
>>> 113:         return MethodHandle.isReachableFrom(vform.getMethodType(0), cl)
>>> 114:                 && target.isReachableFrom(cl);
>> 
>> Right... one of the filters may also keep a class loader alive. But to check them, we'd have to eagerly instantiate all of them as well.
>> 
>> FWIW, I don't think this is an issue we can just ignore. If a filter keeps a class loader alive, we'd still have a problem.
>> 
>> Maybe it's possible to collect all the types involved from the filter when creating an IndirectVarHandle instead, and save those in a separate list for this check.
>
> I mean a filter method handle may keep other classes alive in addition to just its types. This is not possible from just checking the types. The vform method type is sufficient, because the types from the filter method type is always in one of the indirect layers.

Also, it’s possible for intermediate `MethodHandle`s used as part of `MethodHandle` combinators to refer to types from different class loaders.

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

PR Review Comment: https://git.openjdk.org/jdk/pull/28585#discussion_r2602260725


More information about the core-libs-dev mailing list