On Tue, 14 May 2024 17:25:37 GMT, Claes Redestad <redes...@openjdk.org> wrote:
>> This PR suggests refactoring the implementation classes of >> java.lang.constant into a new package jdk.internal.constant to enable >> sharing some trusted static factory methods with users elsewhere in >> java.base, such as java.lang.invoke and java.lang.classfile. The refactoring >> also adds some "trusted" methods for use when input is pre-validated, and >> makes use of them where applicable in the current implementation. There are >> more changes in the pipeline which will be folded into #17108 or PR'ed once >> that is integrated. >> >> There are two optimizations mixed up here. One in >> `MethodTypeDesc.ofDescriptor`: >> >> Name >> (descString) Cnt Base Error Test Error Unit Change >> MethodTypeDescFactories.ofDescriptor >> (Ljava/lang/Object;Ljava/lang/String;)I 6 138,371 ± 0,767 136,939 ± >> 1,126 ns/op 1,01x (p = 0,000*) >> MethodTypeDescFactories.ofDescriptor >> ()V 6 10,528 ± 2,495 4,110 ± 0,047 ns/op 2,56x (p = 0,000*) >> MethodTypeDescFactories.ofDescriptor >> ([IJLjava/lang/String;Z)Ljava/util/List; 6 209,390 ± 4,583 196,175 ± >> 3,211 ns/op 1,07x (p = 0,000*) >> MethodTypeDescFactories.ofDescriptor >> ()[Ljava/lang/String; 6 36,039 ± 8,684 20,794 ± 1,110 ns/op 1,73x >> (p = 0,000*) >> MethodTypeDescFactories.ofDescriptor >> (..IIJ)V 6 279,139 ± 6,248 187,934 ± 0,857 ns/op 1,49x (p = 0,000*) >> MethodTypeDescFactories.ofDescriptor >> (.....................). 6 2174,387 ± 132,879 1150,652 ± 3,158 ns/op >> 1,89x (p = 0,000*) >> * = significant >> >> >> The other in `ClassDesc::nested`, where to get rid of a simple static method >> in `ConstantUtils` I ended up speeding up and simplifying the public factory >> method: >> >> Name Cnt Base Error Test >> Error Unit Change >> ClassDescFactories.ReferenceOnly.ofNested 6 209,853 ± 132,525 22,017 ± >> 0,573 ns/op 9,53x (p = 0,000*) >> * = significant >> >> >> The optimizations could be split out and PRd independently, but I think they >> are simple enough to include in this refactoring. > > Claes Redestad has updated the pull request incrementally with one additional > commit since the last revision: > > Add microbenchmark for ClassDesc methods + a few optimizations Added a few microbenchmarks, and a couple of optimizations: Name Cnt Base Error Test Error Unit Change ClassDescMethods.arrayType 15 49,922 ± 0,616 14,546 ± 0,524 ns/op 3,43x (p = 0,000*) :gc.alloc.rate.norm 312,000 ± 0,000 144,000 ± 0,000 B/op 0,46x (p = 0,000*) ClassDescMethods.arrayType1 15 37,764 ± 0,625 14,441 ± 0,272 ns/op 2,62x (p = 0,000*) :gc.alloc.rate.norm 312,000 ± 0,000 144,000 ± 0,000 B/op 0,46x (p = 0,000*) ClassDescMethods.arrayType2 15 48,663 ± 0,168 35,223 ± 6,517 ns/op 1,38x (p = 0,000*) :gc.alloc.rate.norm 360,000 ± 0,000 256,000 ± 0,000 B/op 0,71x (p = 0,000*) ClassDescMethods.displayName 15 9,663 ± 0,326 9,285 ± 0,334 ns/op 1,04x (p = 0,002*) :gc.alloc.rate.norm 48,000 ± 0,000 48,000 ± 0,000 B/op 1,00x (p = 0,002 ) ClassDescMethods.packageName 15 39,387 ± 1,134 31,242 ± 5,554 ns/op 1,26x (p = 0,000*) :gc.alloc.rate.norm 168,000 ± 0,000 96,000 ± 0,000 B/op 0,57x (p = 0,000*) * = significant This can be broken out to a follow-up PR, naturally. ------------- PR Comment: https://git.openjdk.org/jdk/pull/19105#issuecomment-2110768382