RFR: 8284579: Improve VarHandle checks for interpreter [v2]

Mandy Chung mchung at openjdk.java.net
Fri Apr 8 22:45:33 UTC 2022


On Fri, 8 Apr 2022 12:20:32 GMT, Claes Redestad <redestad at openjdk.org> wrote:

>> 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, `-Xint`
>> 
>> 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, `-Xint`
>> 
>> 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
>> 
>> 
>> No significant performance difference in normal mode.
>
> Claes Redestad has updated the pull request incrementally with one additional commit since the last revision:
> 
>   Simplified as suggested by @ExE-Boss

The change looks fine.  A `checkXXX` method if returning a boolean would typically indicate if it succeeds or not.    `checkExactAccessMode` returns the directness of this VarHandle which is not obvious from its method name.   It'd be better if the method name can be explicit that it returns its directness after the exact access mode check.  But I can't think of a good method name though.

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

Marked as reviewed by mchung (Reviewer).

PR: https://git.openjdk.java.net/jdk/pull/8160


More information about the core-libs-dev mailing list