[9] RFR (M): 8050057: Improve caching of MethodHandle reinvokers

Vladimir Ivanov vladimir.x.ivanov at oracle.com
Mon Jul 14 15:17:08 UTC 2014


http://cr.openjdk.java.net/~vlivanov/8050057/webrev.00/
https://bugs.openjdk.java.net/browse/JDK-8050057

Cache MethodHandle reinvokers per basic type.
For BoundMethodHandles, rebinding is no-op unless underlying LF is too 
complex (see BMH::tooComplex() for details).

Also, introduced DelegatingMethodHandle whose invocation behavior is 
determined by a target MethodHandle. The delegating MH itself can hold 
extra "intentions" beyond the simple behavior.

AsVarargsCollector and WrappedMember are made subclasses of 
DelegatingMethodHandle. Also, SimpleMethodHandle extends 
BoundMethodHandle now.

Rebinding and delegation share same logic and LF shape, but have 
different caches (LF_REBIND vs LF_DELEGATE). The only difference is 
their name. They could be consolidated in the future.

Testing: jdk/java/lang/invoke, jdk/java/util/streams, nashorn, octane w/ 
"-ea -esa" and COMPILE_THRESHOLD={0,30}.

Reviewed-by: vlivanov, ?
Contributed-by: john.r.rose at oracle.com

Thanks!

Best regards,
Vladimir Ivanov



More information about the core-libs-dev mailing list