RFR: 8338532: Speed up the ClassFile API MethodTypeDesc#ofDescriptor [v2]
Claes Redestad
redestad at openjdk.org
Tue Aug 20 10:05:59 UTC 2024
On Mon, 19 Aug 2024 23:14:06 GMT, Shaojin Wen <duke at openjdk.org> wrote:
>> The current implementation of ofDescriptor puts return type and parameter types together in an ArrayList, and then splits them into return type and array of parameter types. This ArrayList creation is unnecessary, considering most descriptors only have few parameter types.
>>
>> By splitting return type and parameter types separately and scanning the descriptor first to get the number of parameters, we can just allocate an exact, trusted array for the resulting MethodTypeDesc without copy.
>
> Shaojin Wen has updated the pull request incrementally with one additional commit since the last revision:
>
> less changes with suggestions from @liach
It would seem the specialization for `Ljava/lang/Object;` (via `String::regionMatches`) hurts interpreted performance, putting into doubt whether that optimization is fruitful for startup performance. `-Xint` numbers:
Name (descString) Cnt Base Error Test Error Unit Change
ofDescriptor (Ljava/lang/Object;Ljava/lang/String;)I 6 7734,757 ± 154,894 10463,211 ± 61,369 ns/op 0,74x (p = 0,000*)
ofDescriptor ()V 6 1346,374 ± 56,956 527,418 ± 54,952 ns/op 2,55x (p = 0,000*)
ofDescriptor (Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; 6 9873,260 ± 118,592 13512,378 ± 44,295 ns/op 0,73x (p = 0,000*)
ofDescriptor (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; 6 9790,973 ± 196,979 15078,814 ± 154,289 ns/op 0,65x (p = 0,000*)
ofDescriptor (Ljava/lang/Integer;Ljava/lang/Integer;)Ljava/lang/Integer; 6 9963,069 ± 126,510 9610,144 ± 1952,719 ns/op 1,04x (p = 0,270 )
ofDescriptor ()Ljava/lang/Object; 6 3730,028 ± 757,223 4314,956 ± 460,108 ns/op 0,86x (p = 0,002*)
ofDescriptor ([IJLjava/lang/String;Z)Ljava/util/List; 6 8909,754 ± 93,260 9004,239 ± 917,012 ns/op 0,99x (p = 0,512 )
ofDescriptor ()[Ljava/lang/String; 6 3710,475 ± 171,494 3159,694 ± 67,448 ns/op 1,17x (p = 0,000*)
ofDescriptor (..IIJ)V 6 18670,031 ± 257,048 17178,329 ± 544,327 ns/op 1,09x (p = 0,000*)
ofDescriptor ([III.Z[B..[.[B). 6 45623,579 ± 8342,076 46138,662 ± 13494,653 ns/op 0,99x (p = 0,829 )
ofDescriptor (.....................). 6 166686,442 ± 3550,565 167529,385 ± 11210,813 ns/op 0,99x (p = 0,640 )
* = significant
-------------
PR Comment: https://git.openjdk.org/jdk/pull/20611#issuecomment-2298473472
More information about the core-libs-dev
mailing list