On Jun 10, 2013, at 5:53 PM, Aleksey Shipilev <aleksey.shipi...@oracle.com> 
wrote:

> Hi,
> 
> This is the follow-up on the issue Doug identified:
>  http://mail.openjdk.java.net/pipermail/core-libs-dev/2013-June/017798.html
> 
> I had reworked the patch, webrev is here:
>  http://cr.openjdk.java.net/~shade/8016236/webrev.01/
> 
> Notable differences from Doug's version are:
>  - handle non-generic cases as well

I was wondering about that case too.


>  - reuse ReflectionData to cache the interfaces and generic signatures

Any guess on the size impact due to those new fields in ReflectionData?


>  - code style (chained ternary operators blown up)
>  - fixes the race along the way
>      http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6398355
> 
> Testing:
>  - Linux x86_64/release: build OK
>  - Linux x86_64/release: java/lang/reflect regression tests OK
>  - Microbenchmarks show whooping increase in performance, see below
> 

Nice improvements.

Paul.


> (If there are no stylistic and other comments, I would like to do the
> JPRT submit and/or additional testing [which?]).
> 
> The benchmark is here (you need JMH to build and run):
>  http://cr.openjdk.java.net/~shade/8016236/classbench.zip
> 
> Before:
>> Benchmark                                       Mode Thr    Cnt  Sec         
>> Mean   Mean error    Units
>> o.b.ClassBench.generic_getGenericInterfaces     avgt   1      5    1      
>> 326.835        1.220  nsec/op
>> o.b.ClassBench.generic_getGenericSuperclass     avgt   1      5    1      
>> 308.793        2.828  nsec/op
>> o.b.ClassBench.generic_getTypeParameters        avgt   1      5    1      
>> 312.627        1.637  nsec/op
>> o.b.ClassBench.raw_getGenericInterfaces         avgt   1      5    1      
>> 216.983        8.902  nsec/op
>> o.b.ClassBench.raw_getGenericSuperclass         avgt   1      5    1       
>> 59.933        0.183  nsec/op
>> o.b.ClassBench.raw_getTypeParameters            avgt   1      5    1       
>> 65.469        0.284  nsec/op
> 
> Doug's version:
>> Benchmark                                       Mode Thr    Cnt  Sec         
>> Mean   Mean error    Units
>> o.b.ClassBench.generic_getGenericInterfaces     avgt   1      5    1       
>> 15.106        0.271  nsec/op
>> o.b.ClassBench.generic_getGenericSuperclass     avgt   1      5    1        
>> 5.304        0.024  nsec/op
>> o.b.ClassBench.generic_getTypeParameters        avgt   1      5    1       
>> 16.739        0.045  nsec/op
>> o.b.ClassBench.raw_getGenericInterfaces         avgt   1      5    1      
>> 213.825        1.346  nsec/op
>> o.b.ClassBench.raw_getGenericSuperclass         avgt   1      5    1       
>> 61.651        0.394  nsec/op
>> o.b.ClassBench.raw_getTypeParameters            avgt   1      5    1       
>> 64.340        0.522  nsec/op
> 
> After:
>> Benchmark                                       Mode Thr    Cnt  Sec         
>> Mean   Mean error    Units
>> o.b.ClassBench.generic_getGenericInterfaces     avgt   1      5    1       
>> 14.985        0.104  nsec/op
>> o.b.ClassBench.generic_getGenericSuperclass     avgt   1      5    1        
>> 5.300        0.008  nsec/op
>> o.b.ClassBench.generic_getTypeParameters        avgt   1      5    1       
>> 16.874        0.175  nsec/op
>> o.b.ClassBench.raw_getGenericInterfaces         avgt   1      5    1       
>> 23.941        0.177  nsec/op
>> o.b.ClassBench.raw_getGenericSuperclass         avgt   1      5    1        
>> 8.583        0.044  nsec/op
>> o.b.ClassBench.raw_getTypeParameters            avgt   1      5    1       
>> 12.400        0.045  nsec/op
> 
> Thanks,
> Aleksey.

Reply via email to