On Jul 14, 2014, at 5:17 PM, Vladimir Ivanov <vladimir.x.iva...@oracle.com> wrote:
> 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 > Looks good. Juste one comment. BoundMethodHandle The following fields can be made final: 132 private static int FIELD_COUNT_THRESHOLD = 12; // largest convenient BMH field count 133 private static int FORM_EXPRESSION_THRESHOLD = 24; // largest convenient BMH expression count Paul.