RFR: [performance] Early class initialization from LambdaMetafactory improves lambda linkage performance

Remi Forax forax at univ-mlv.fr
Wed Sep 11 10:43:17 PDT 2013

On 09/11/2013 07:14 PM, Aleksey Shipilev wrote:
> On 09/11/2013 08:23 PM, Sergey Kuksenko wrote:
>> http://cr.openjdk.java.net/~skuksenko/jsr335/8024633/webrev.00/
> Looks good. (Not the Reviewer).
> -Aleksey.

you can simplify the code a little, you don't need to check the length 
of the array twice,
and the privileged action can return only the constructor instead of the 
avoiding to access the first element twice.

if (invokedType.parameterCount() == 0) {
     final Constructor constructor = AccessController.doPrivileged(
         new PrivilegedAction<Constructor[]>() {
             public Constructor[] run() {
                 Constructor<?>[] constructors = innerClass.getDeclaredConstructors();
                 if (constructors.length != 1) {
                     throw new ReflectiveOperationException("Expected one lambda constructor for "
                          + innerClass.getCanonicalName() + ", got " +constructors.length);
                 Constructor constructor = ctrs[0];
                 // The lambda implementing inner class constructor is private, set
                 // it accessible (by us) before creating the constant sole instance
                 return constructor;
     Object instance = constructor.newInstance();
     return new ConstantCallSite(MethodHandles.constant(samBase, instance));

I've let the 'final' in front of of the declaration constructor (line 2) 
even final is not used
for the declaration of other local variables and add in my opinion only 


More information about the lambda-dev mailing list