Integrated: 8331187: Optimize MethodTypeDesc and ClassDesc.ofDescriptor for primitive types
Claes Redestad
redestad at openjdk.org
Fri Apr 26 14:10:09 UTC 2024
On Fri, 26 Apr 2024 10:27:16 GMT, Claes Redestad <redestad at openjdk.org> wrote:
> 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...
This pull request has now been integrated.
Changeset: 8bbd7251
Author: Claes Redestad <redestad at openjdk.org>
URL: https://git.openjdk.org/jdk/commit/8bbd7251a596c6fad1a6675c077deb9fd7c8ff95
Stats: 140 lines in 6 files changed: 87 ins; 19 del; 34 mod
8331187: Optimize MethodTypeDesc and ClassDesc.ofDescriptor for primitive types
Reviewed-by: jvernee, liach
-------------
PR: https://git.openjdk.org/jdk/pull/18971
More information about the core-libs-dev
mailing list