RFR: 8142334: Improve lazy initialization of java.lang.invoke

Claes Redestad claes.redestad at oracle.com
Wed Nov 11 16:34:15 UTC 2015


Hi Peter,

On 2015-11-11 17:13, Peter Levart wrote:
> Hi Claes,
>
> Would constructing NamedFunction(s) using MemberName(s) directly, 
> bypassing reflection, make any sense (for example in DMH):
>
>     private static NamedFunction makeConstantFunction(int idx) {
>         try {
>             switch (idx) {
>                 case NF_internalMemberName:
>                     return makeConstantFunction(Object.class, 
> "internalMemberName", Object.class);
>                 case NF_internalMemberNameEnsureInit:
>                     return makeConstantFunction(Object.class, 
> "internalMemberNameEnsureInit", Object.class);
>                 case NF_ensureInitialized:
>                     return makeConstantFunction(void.class, 
> "ensureInitialized", Object.class);
>                 case NF_fieldOffset:
>                     return makeConstantFunction(long.class, 
> "fieldOffset", Object.class);
>                 case NF_checkBase:
>                     return makeConstantFunction(Object.class, 
> "checkBase", Object.class);
>                 case NF_staticBase:
>                     return makeConstantFunction(Object.class, 
> "staticBase", Object.class);
>                 case NF_staticOffset:
>                     return makeConstantFunction(long.class, 
> "staticOffset", Object.class);
>                 case NF_checkCast:
>                     return makeConstantFunction(Object.class, 
> "checkCast", Object.class, Object.class);
>                 case NF_allocateInstance:
>                     return makeConstantFunction(Object.class, 
> "allocateInstance", Object.class);
>                 case NF_constructorMethod:
>                     return makeConstantFunction(Object.class, 
> "constructorMethod", Object.class);
>             }
>         } catch (ReflectiveOperationException ex) {
>             throw newInternalError(ex);
>         }
>         throw newInternalError("Unknown function index: " + idx);
>     }
>
>     private static NamedFunction makeConstantFunction(
>         Class<?> rtype, String name, Class<?> ... ptypes) throws 
> NoSuchMethodException {
>         return new NamedFunction(
>             new MemberName(
>                 DirectMethodHandle.class, name, 
> MethodType.methodType(rtype, ptypes), REF_invokeStatic));
>     }
>
>
> ...if reflection is not used, there might be some space savings. Or not?

I might be wrong, but I think MemberName will have to do the same 
reflection to resolve the actual function before use. We might defer the 
reflection for a bit, but not get rid of it by this approach.

Either way it seems like something to consider separately.

/Claes

>
> Regards, Peter
>




More information about the core-libs-dev mailing list