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.