> This PR makes ClassDesc.ofDescriptor return the shared constant for primitive 
> descriptor strings ("I" etc..), and leverages this further by refactoring 
> `MethodTypeDescImpl.ofDescriptor` to avoid the intermediate substring for 
> primitives. 
> 
> Microbenchmarks results look good with expected speedups and allocation 
> reductions any time a primitive is part of the descriptor string, and a 
> non-significant cost otherwise:
> 
> 
> Name                                                             (descString) 
> Cnt     Base     Error       Test     Error   Unit  Change
> ClassDescFactories.ofDescriptor                            Ljava/lang/Object; 
>   6   13,941 ±   1,643     14,071 ±   1,333  ns/op   0,99x (p = 0,681 )
>   :gc.alloc.rate.norm                                                         
>       16,000 ±   0,000     16,000 ±   0,000   B/op   1,00x (p = 0,617 )
> ClassDescFactories.ofDescriptor                                             V 
>   6    9,212 ±   1,045      1,405 ±   0,049  ns/op   6,55x (p = 0,000*)
>   :gc.alloc.rate.norm                                                         
>       48,000 ±   0,000      0,000 ±   0,000   B/op   0,00x (p = 0,000*)
> ClassDescFactories.ofDescriptor                                             I 
>   6    9,009 ±   0,035      1,431 ±   0,192  ns/op   6,30x (p = 0,000*)
>   :gc.alloc.rate.norm                                                         
>       48,000 ±   0,000      0,000 ±   0,000   B/op   0,00x (p = 0,000*)
> MethodTypeDescFactories.ofDescriptor  (Ljava/lang/Object;Ljava/lang/String;)I 
>   6  182,050 ±   4,333    141,644 ±   2,685  ns/op   1,29x (p = 0,000*)
>   :gc.alloc.rate.norm                                                         
>      360,001 ±   0,000    264,001 ±   0,000   B/op   0,73x (p = 0,000*)
> MethodTypeDescFactories.ofDescriptor                                      ()V 
>   6   17,169 ±   2,008      9,915 ±   0,018  ns/op   1,73x (p = 0,000*)
>   :gc.alloc.rate.norm                                                         
>      120,000 ±   0,000    104,000 ±   0,000   B/op   0,87x (p = 0,000*)
> MethodTypeDescFactories.ofDescriptor ([IJLjava/lang/String;Z)Ljava/util/List; 
>   6  270,372 ±   3,624    217,050 ±   3,170  ns/op   1,25x (p = 0,000*)
>   :gc.alloc.rate.norm                                                         
>      520,002 ±   0,000    328,001 ±   0,000   B/op   0,63x (p = 0,000*)
> MethodTypeDescFactories.ofDescriptor                    ()[Ljava/lang/String; 
>   6   35,036 ±   0,351     36,010 ±   3,882  ns/op   0,97x (p = 0,1...

Claes Redestad has updated the pull request incrementally with one additional 
commit since the last revision:

  Fix ClassDescTest; remove redundant validation performed by 
ReferenceClassDescImpl

-------------

Changes:
  - all: https://git.openjdk.org/jdk/pull/18971/files
  - new: https://git.openjdk.org/jdk/pull/18971/files/96aa846b..257dc547

Webrevs:
 - full: https://webrevs.openjdk.org/?repo=jdk&pr=18971&range=01
 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=18971&range=00-01

  Stats: 14 lines in 2 files changed: 1 ins; 11 del; 2 mod
  Patch: https://git.openjdk.org/jdk/pull/18971.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/18971/head:pull/18971

PR: https://git.openjdk.org/jdk/pull/18971

Reply via email to