On Fri, 26 Apr 2024 10:54:49 GMT, Claes Redestad <redes...@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... > > Claes Redestad has updated the pull request incrementally with one additional > commit since the last revision: > > Fix ClassDescTest; remove redundant validation performed by > ReferenceClassDescImpl Looks like your `MethodTypeDescFactories` benchmark is missing form the PR? Does removing the explicit null checks make that much difference for performance? They are kind of nice for clarity. Also, looks like the copyright year still needs to be updated on some of the files. src/java.base/share/classes/java/lang/constant/MethodTypeDescImpl.java line 97: > 95: int args = ptypes.size() - 1; > 96: ClassDesc[] paramTypes = args > 0 > 97: ? ptypes.subList(1, args + 1).toArray(new ClassDesc[0]) I suppose this could also use `EMPTY_CLASSDESC` instead of creating a new array ------------- PR Review: https://git.openjdk.org/jdk/pull/18971#pullrequestreview-2024805435 PR Review Comment: https://git.openjdk.org/jdk/pull/18971#discussion_r1580881761