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

Reply via email to