JDK 8 RFR for JDK-7185456 : (ann) Optimize Annotation handling in java/sun.reflect.* code for small number of annotationsC

Joe Darcy joe.darcy at oracle.com
Wed Mar 27 16:39:32 UTC 2013


Hello Joel,

On 03/27/2013 01:41 AM, Joel Borggrén-Franck wrote:
> Hi Joe,
>
> Looks good to me.
>
> I would include Andrej's suggestion of removing one of the 
> members.put(...).

Pushed with the suggestion; thanks for the reviews,

-Joe

>
> cheers
> /Joel
>
> On 03/26/2013 11:43 PM, Joe Darcy wrote:
>> Hello,
>>
>> Please review this refactoring of how annotations objects are created:
>>
>>      JDK-7185456 : (ann) Optimize Annotation handling in 
>> java/sun.reflect.*
>> code for small number of annotationsC
>>      http://cr.openjdk.java.net/~darcy/7185456.0/
>>
>> In brief, an annotation object is backed by a hash map with one entry 
>> per
>> method defined on the annotation type. Currently the default HashMap
>> constructor which uses a default capacity of 16 is used. Since most
>> annotation type define many fewer methods, some space is wasted. The 
>> patch
>> (inline below) "right sizes" the HashMap to match the number of 
>> methods in
>> the annotation type.
>>
>> Thanks,
>>
>> -Joe
>>
>> --- old/src/share/classes/sun/reflect/annotation/AnnotationType.java
>> 2013-03-26 15:37:22.000000000 -0700
>> +++ new/src/share/classes/sun/reflect/annotation/AnnotationType.java
>> 2013-03-26 15:37:22.000000000 -0700
>> @@ -45,19 +45,18 @@
>>        * types.  This matches the return value that must be used for a
>>        * dynamic proxy, allowing for a simple isInstance test.
>>        */
>> -    private final Map<String, Class<?>> memberTypes = new
>> HashMap<String,Class<?>>();
>> +    private final Map<String, Class<?>> memberTypes;
>>
>>       /**
>>        * Member name -> default value mapping.
>>        */
>> -    private final Map<String, Object> memberDefaults =
>> -        new HashMap<String, Object>();
>> +    private final Map<String, Object> memberDefaults;
>>
>>       /**
>>        * Member name -> Method object mapping. This (and its assoicated
>>        * accessor) are used only to generate 
>> AnnotationTypeMismatchExceptions.
>>        */
>> -    private final Map<String, Method> members = new HashMap<String, 
>> Method>();
>> +    private final Map<String, Method> members;
>>
>>       /**
>>        * The retention policy for this annotation type.
>> @@ -105,6 +104,9 @@
>>                   }
>>               });
>>
>> +        memberTypes = new HashMap<String,Class<?>>(methods.length+1, 
>> 1.0f);
>> +        memberDefaults = new HashMap<String, Object>(0);
>> +        members = new HashMap<String, Method>(methods.length+1, 1.0f);
>>
>>           for (Method method :  methods) {
>>               if (method.getParameterTypes().length != 0)




More information about the core-libs-dev mailing list