RFR: 8331114: Further improve performance of MethodTypeDesc::descriptorString [v2]

Claes Redestad redestad at openjdk.org
Thu Apr 25 13:34:50 UTC 2024


> When analyzing (startup) performance of the Classfile API I found this opportunity to further improve `MethodTypeDescImpl::descriptorString`.
> 
> Performance improves across the board in existing microbenchmarks:
> 
> Name                                                                 (descString) Cnt   Base   Error    Test   Error  Unit  Change
> MethodTypeDescFactories.descriptorString  (Ljava/lang/Object;Ljava/lang/String;)I   6 55,179 ± 2,027  32,920 ± 1,189 ns/op   1,68x (p = 0,000*)
> MethodTypeDescFactories.descriptorString                                      ()V   6 17,689 ± 1,871  11,060 ± 0,331 ns/op   1,60x (p = 0,000*)
> MethodTypeDescFactories.descriptorString ([IJLjava/lang/String;Z)Ljava/util/List;   6 86,627 ± 1,646  41,035 ± 0,636 ns/op   2,11x (p = 0,000*)
> MethodTypeDescFactories.descriptorString                    ()[Ljava/lang/String;   6 18,305 ± 1,974  13,110 ± 0,089 ns/op   1,40x (p = 0,000*)
>   * = significant
> 
> 
> The improvement is even more pronounced when running with `-Xint`, which is relevant for reducing startup overheads of early ClassFile API use:
> 
> Name                                                                 (descString) Cnt     Base      Error      Test     Error  Unit  Change
> MethodTypeDescFactories.descriptorString  (Ljava/lang/Object;Ljava/lang/String;)I   6 5122,061 ±   81,335  2626,481 ± 101,466 ns/op   1,95x (p = 0,000*)
> MethodTypeDescFactories.descriptorString                                      ()V   6 3481,316 ±  258,904  1489,267 ±  15,506 ns/op   2,34x (p = 0,000*)
> MethodTypeDescFactories.descriptorString ([IJLjava/lang/String;Z)Ljava/util/List;   6 7741,081 ± 1628,244  3281,778 ±  41,892 ns/op   2,36x (p = 0,000*)
> MethodTypeDescFactories.descriptorString                    ()[Ljava/lang/String;   6 3677,803 ±   63,432  1495,291 ±   8,995 ns/op   2,46x (p = 0,000*)
>   * = significant
>   ```
>   
>  I also applied similar approach to `MethodTypeDesc::displayDescriptor`: while not performance sensitive I think these are so inter-related that it makes sense to implement them in a similar fashion.

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

  comma-separated

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

Changes:
  - all: https://git.openjdk.org/jdk/pull/18945/files
  - new: https://git.openjdk.org/jdk/pull/18945/files/06947305..2979847c

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

  Stats: 3 lines in 1 file changed: 3 ins; 0 del; 0 mod
  Patch: https://git.openjdk.org/jdk/pull/18945.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/18945/head:pull/18945

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


More information about the core-libs-dev mailing list