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.r...@oracle.com
Thanks!
Best regards,
Vladimir Ivanov