On Mon, 8 Dec 2025 02:08:37 GMT, Chen Liang <[email protected]> wrote:
>> Since access descriptor is created for each VH operation site, we can >> optimistically cache the adapted method handle in a site if the site >> operates on a constant VH. Used a C2 IR test to verify such a setup through >> an inexact VarHandle invocation can be constant folded through (previously, >> it was blocked by `asType`) > > Chen Liang has updated the pull request with a new target base due to a merge > or a rebase. The incremental webrev excludes the unrelated changes brought in > by the merge/rebase. The pull request contains 15 additional commits since > the last revision: > > - Bugs and verify loader leak > - Try to avoid loader leak > - Merge branch 'master' of https://github.com/openjdk/jdk into > fix/vh-adapt-cache > - Revert void special case removal due to C2 shortage causing > TestZGCBarrierElision::testAtomicThenAtomicAnotherField failure > - Test from Jorn > - Copyright years > - Fix problem identified by Jorn > - Rollback getAndAdd for now > - Redundant change > - Merge branch 'master' of https://github.com/openjdk/jdk into > fix/vh-adapt-cache > - ... and 5 more: https://git.openjdk.org/jdk/compare/513d3327...eebb8ff7 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. src/java.base/share/classes/java/lang/invoke/MethodHandle.java line 983: > 981: } > 982: > 983: static boolean isBuiltinLoader(ClassLoader loader) { I think this can still be private? src/java.base/share/classes/java/lang/invoke/VarHandle.java line 2018: > 2016: // Call MethodHandle.isReachableFrom for the used classes > 2017: return true; > 2018: } Can you make this `abstract`? ------------- PR Review Comment: https://git.openjdk.org/jdk/pull/28585#discussion_r2599553053 PR Review Comment: https://git.openjdk.org/jdk/pull/28585#discussion_r2599496891 PR Review Comment: https://git.openjdk.org/jdk/pull/28585#discussion_r2599488329
