RFR: 8029019: (ann) Optimize annotation handling in core reflection

Peter Levart peter.levart at gmail.com
Tue Jan 17 14:10:35 UTC 2017


Hi,

This is a preview of a patch that addresses the following issue:

     https://bugs.openjdk.java.net/browse/JDK-8029019

But it is also an attempt to clean-up failure reporting for invalid 
annotation types. Here's the 1st webrev:

http://cr.openjdk.java.net/~plevart/jdk9-dev/8029019_Annotations.optimization/webrev.01/

With this patch applied, running the following benchmark:

http://cr.openjdk.java.net/~plevart/jdk9-dev/8029019_Annotations.optimization/AnnotationsBench.java

Produces the following results:

Original:

Benchmark                                 Mode  Cnt Score     Error  Units
AnnotationsBench.a1_PrimitiveMember       avgt   10 20.790 ±   1.317  ns/op
AnnotationsBench.a2_ObjectMember          avgt   10 21.550 ±   0.580  ns/op
AnnotationsBench.a3_PrimitiveArrayMember  avgt   10 28.314 ±   1.477  ns/op
AnnotationsBench.a4_ObjectArrayMember     avgt   10 27.094 ±   0.574  ns/op
AnnotationsBench.a5_AnnotationType        avgt   10 13.047 ±   0.983  ns/op
AnnotationsBench.a6_HashCode              avgt   10 158.001 ±   9.347  ns/op
AnnotationsBench.a7_Equals                avgt   10 663.921 ±  27.256  ns/op
AnnotationsBench.a8_ToString              avgt   10 1772.901 ± 107.355  
ns/op

Patched:

Benchmark                                 Mode  Cnt Score    Error  Units
AnnotationsBench.a1_PrimitiveMember       avgt   10 8.547 ±  0.100  ns/op
AnnotationsBench.a2_ObjectMember          avgt   10 8.352 ±  0.340  ns/op
AnnotationsBench.a3_PrimitiveArrayMember  avgt   10 17.526 ±  0.696  ns/op
AnnotationsBench.a4_ObjectArrayMember     avgt   10 15.639 ±  0.116  ns/op
AnnotationsBench.a5_AnnotationType        avgt   10 4.692 ±  0.154  ns/op
AnnotationsBench.a6_HashCode              avgt   10 142.954 ±  7.460  ns/op
AnnotationsBench.a7_Equals                avgt   10 184.535 ±  0.917  ns/op
AnnotationsBench.a8_ToString              avgt   10 1806.685 ± 96.370  ns/op


Allocation rates are also reduced:

Original:

AnnotationsBench.a1_PrimitiveMember:·gc.alloc.rate.norm avgt   10    
16.000 ±   0.001    B/op
AnnotationsBench.a2_ObjectMember:·gc.alloc.rate.norm avgt   10    16.000 
±   0.001    B/op
AnnotationsBench.a3_PrimitiveArrayMember:·gc.alloc.rate.norm avgt   
10    64.000 ±   0.001    B/op
AnnotationsBench.a4_ObjectArrayMember:·gc.alloc.rate.norm avgt   10    
48.000 ±   0.001    B/op
AnnotationsBench.a5_AnnotationType:·gc.alloc.rate.norm avgt   10    
16.000 ±   0.001    B/op
AnnotationsBench.a6_HashCode:·gc.alloc.rate.norm avgt   10   128.000 ±   
0.001    B/op
AnnotationsBench.a7_Equals:·gc.alloc.rate.norm avgt   10   120.001 ±   
0.001    B/op
AnnotationsBench.a8_ToString:·gc.alloc.rate.norm avgt   10  5200.002 ±   
0.001    B/op

Patched:

AnnotationsBench.a1_PrimitiveMember:·gc.alloc.rate.norm avgt   10    ≈ 
10⁻⁵              B/op
AnnotationsBench.a2_ObjectMember:·gc.alloc.rate.norm avgt   10    ≈ 
10⁻⁵              B/op
AnnotationsBench.a3_PrimitiveArrayMember:·gc.alloc.rate.norm avgt   
10    48.000 ±   0.001    B/op
AnnotationsBench.a4_ObjectArrayMember:·gc.alloc.rate.norm avgt   10    
32.000 ±   0.001    B/op
AnnotationsBench.a5_AnnotationType:·gc.alloc.rate.norm avgt   10    ≈ 
10⁻⁵              B/op
AnnotationsBench.a6_HashCode:·gc.alloc.rate.norm avgt   10    64.000 ±   
0.001    B/op
AnnotationsBench.a7_Equals:·gc.alloc.rate.norm avgt   10    24.000 ±   
0.001    B/op
AnnotationsBench.a8_ToString:·gc.alloc.rate.norm avgt   10  5136.002 ±   
0.001    B/op


As for the failure reporting: requesting an annotation for invalid 
annotation type now always produces AnnotationFormatError. Previously, 
some invalid annotations were simply skipped, some produced 
AnnotationFormatError and for some of them, AnnotationFormatError was 
raised only when evaluating Annotation's equals() method.

I would like to discuss this failure behavior more in-depth.

Regards, Peter



More information about the core-libs-dev mailing list