A few additional enhancements aiming to improve VH performance in the interpreter:
- Flatten `TypeAndInvokers`: adds a pointer to `VarHandle` (a small increase 40->48) but removes an object and an indirection on any instance actually used - and might avoid allocating the `MethodHandle[]` unnecessarily on some instances - Have `checkExactAccessMode` return the directness of the `VarHandle` so that we can avoid some `isDirect` method calls. Baseline Benchmark Mode Cnt Score Error Units VarHandleExact.exact_exactInvocation avgt 30 478.324 ? 5.762 ns/op VarHandleExact.generic_exactInvocation avgt 30 392.114 ? 1.644 ns/op VarHandleExact.generic_genericInvocation avgt 30 822.484 ? 1.865 ns/op Patched Benchmark Mode Cnt Score Error Units VarHandleExact.exact_exactInvocation avgt 30 437.704 ? 5.320 ns/op VarHandleExact.generic_exactInvocation avgt 30 374.512 ? 3.154 ns/op VarHandleExact.generic_genericInvocation avgt 30 757.054 ? 1.237 ns/op ------------- Commit messages: - Various improvements to VarHandle startup Changes: https://git.openjdk.java.net/jdk/pull/8160/files Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=8160&range=00 Issue: https://bugs.openjdk.java.net/browse/JDK-8284579 Stats: 232 lines in 4 files changed: 18 ins; 23 del; 191 mod Patch: https://git.openjdk.java.net/jdk/pull/8160.diff Fetch: git fetch https://git.openjdk.java.net/jdk pull/8160/head:pull/8160 PR: https://git.openjdk.java.net/jdk/pull/8160