MethodHandle lookup&invocation performance
Rémi Forax
forax at univ-mlv.fr
Sat Jul 9 03:29:28 PDT 2011
On 07/09/2011 12:21 PM, Rémi Forax wrote:
> You should avoid to create constants more than once.
> Also, bindTo() will create a method handle for-each call.
>
> You can transform your code like that:
>
> private static final MethodHandles.Lookup lookup = MethodHandles.lookup();
> private static final MethodType mt = MethodType.methodType(String.class, String.class);
>
> private static MethodHandle methodhandleLookup(Object receiver, String methodName) throws Throwable {
> return lookup.findVirtual(receiver.getClass(), methodName, mt);
> }
>
> private static String methodhandleInvoke(Object receiver, MethodHandle method) throws Throwable {
> return (String) method.invoke(receiver, "methodhandle");
> }
>
> or like that:
>
> private static final MethodHandles.Lookup lookup = MethodHandles.lookup();
> private static final MethodType mt = MethodType.methodType(String.class, String.class);
> private static final MethodType mt2 = MethodType.methodType(String.class, Object.class, String.class);
>
> private static MethodHandle methodhandleLookup(Object receiver, String methodName) throws Throwable {
> MethodHandle mh = lookup.findVirtual(receiver.getClass(), methodName, mt);
> return mh.asType(mt2);
> }
>
> private static String methodhandleInvoke(Object receiver, MethodHandle method) throws Throwable {
> return (String) method.bindTo(receiver).invokeExact(receiver, "methodhandle");
> }
oups, typo:
private static String methodhandleInvoke(Object receiver, MethodHandle method) throws Throwable {
return (String) method.invokeExact(receiver, "methodhandle");
}
>
> Rémi
Rémi
More information about the mlvm-dev
mailing list