Hi,

in the current implementation MethodHandle.viewAsType eagerly rebinds
when creating a view of a method type as an alternative type:

    MethodHandle viewAsType(MethodType newType, boolean strict) {
        ...
        MethodHandle mh = rebind();
        return this.copyWith(newType, mh.form);
    }

This prevents exposing uncrackable DMHs, ie, ones where calling
Lookup.revealDirect(mh) would not produce a correct MethodHandleInfo.

If we restructure this so that crackability is a property on the DMH, we
can avoid the rebinds:

http://cr.openjdk.java.net/~redestad/8244413/open.00/

This improves overhead slightly when calling MH.asType with a "viewable" type (one where all parameters in the new type can be assigned without transforms to parameters in the old; and return in the old can be assigned without transforms in the new).

At the very least this means a small startup gain for a selection of
apps.

(The patch looks footprint neutral since 15, since the added boolean can
slot into a padding gap created by fields in the MethodHandle base
class.)

Testing: tier1-3

/Claes

Reply via email to