[foreign-memaccess] RFR 8237349: Memory access var handles are never called with exact types

Maurizio Cimadamore maurizio.cimadamore at oracle.com
Wed Jan 29 16:10:48 UTC 2020


We currently have an issue: since the memory access var handle have to 
use MemoryAddressProxy as their first coordinate (such handles are 
generated in java.base which doesn't see the true MemoryAddress 
interface), whenever a var handle get/set fall outside the guards in 
VarHandleGuards performance suffer big time, because a full asType() 
adaptation has to occur.

For instance these are some numbers for the TestOverNonConstant benchmark:

W/ guards

0.306 ms/op

W/o guards (-Djava.lang.invoke.VarHandle.VAR_HANDLE_GUARDS=false)

13.926 ms/op

The proposed patch adds an adaptation step to all memory access handles, 
so that their coordinate type is adjusted to be MemoryAddress, not 
MemoryAddressProxy. With this, there's no difference in performances w/ 
and w/o guards.

Webrev:

http://cr.openjdk.java.net/~mcimadamore/panama/8237349/

Note: as demonstrated in the test changes, this also makes adapting 
access var handle easier, since the user can't really access 
MemoryAddressProxy.

P.S.
As a precaution I've run all our microbenchmark which seem unaffected by 
this (except in cases where, as shown above, this patch makes quite the 
- positive - difference).

Maurizio




More information about the panama-dev mailing list