RFR: 8332826: Make hashCode methods in ArraysSupport friendlier [v2]
Pavel Rappo
prappo at openjdk.org
Wed May 29 12:47:02 UTC 2024
On Tue, 28 May 2024 20:40:30 GMT, Claes Redestad <redestad at openjdk.org> wrote:
>> src/java.base/share/classes/jdk/internal/util/ArraysSupport.java line 275:
>>
>>> 273: return switch (length) {
>>> 274: case 0 -> initialValue;
>>> 275: case 1 -> 31 * initialValue + (a[fromIndex] & 0xff);
>>
>> For clarity, if you think it helps:
>> Suggestion:
>>
>> case 1 -> 31 * initialValue + Byte.toUnsignedInt(a[fromIndex]);
>
> I don't care as long as microbenchmarks don't get a hiccup.
@cl4es, here are some results from my machine (macosx-aarch64):
Name (size) Cnt Base Error Test Error Unit Change
ArraysHashCode.bytes 1 15 0.715 ± 0.004 0.725 ± 0.029 ns/op 0.99x (p = 0.182 )
ArraysHashCode.bytes 10 15 3.753 ± 0.024 3.747 ± 0.011 ns/op 1.00x (p = 0.322 )
ArraysHashCode.bytes 100 15 69.731 ± 0.157 69.737 ± 0.092 ns/op 1.00x (p = 0.891 )
ArraysHashCode.bytes 10000 15 9369.386 ± 1.449 9372.008 ± 6.678 ns/op 1.00x (p = 0.133 )
ArraysHashCode.chars 1 15 0.719 ± 0.024 0.734 ± 0.024 ns/op 0.98x (p = 0.076 )
ArraysHashCode.chars 10 15 3.744 ± 0.005 3.746 ± 0.004 ns/op 1.00x (p = 0.308 )
ArraysHashCode.chars 100 15 69.741 ± 0.112 69.714 ± 0.044 ns/op 1.00x (p = 0.365 )
ArraysHashCode.chars 10000 15 9367.123 ± 5.320 9371.325 ± 6.407 ns/op 1.00x (p = 0.046 )
ArraysHashCode.ints 1 15 0.711 ± 0.013 0.706 ± 0.006 ns/op 1.01x (p = 0.137 )
ArraysHashCode.ints 10 15 3.750 ± 0.002 3.752 ± 0.004 ns/op 1.00x (p = 0.283 )
ArraysHashCode.ints 100 15 69.753 ± 0.086 69.711 ± 0.016 ns/op 1.00x (p = 0.065 )
ArraysHashCode.ints 10000 15 9376.225 ± 5.845 9376.218 ± 12.181 ns/op 1.00x (p = 0.999 )
ArraysHashCode.multibytes 1 15 0.741 ± 0.001 0.740 ± 0.001 ns/op 1.00x (p = 0.038 )
ArraysHashCode.multibytes 10 15 2.737 ± 0.001 2.826 ± 0.136 ns/op 0.97x (p = 0.017 )
ArraysHashCode.multibytes 100 15 32.202 ± 0.059 32.153 ± 0.006 ns/op 1.00x (p = 0.004*)
ArraysHashCode.multibytes 10000 15 4922.740 ± 25.590 4921.468 ± 7.372 ns/op 1.00x (p = 0.846 )
ArraysHashCode.multichars 1 15 0.740 ± 0.005 0.740 ± 0.000 ns/op 1.00x (p = 0.996 )
ArraysHashCode.multichars 10 15 2.732 ± 0.002 2.737 ± 0.003 ns/op 1.00x (p = 0.000*)
ArraysHashCode.multichars 100 15 32.109 ± 0.017 32.182 ± 0.028 ns/op 1.00x (p = 0.000*)
ArraysHashCode.multichars 10000 15 4925.750 ± 46.366 4930.684 ± 26.001 ns/op 1.00x (p = 0.704 )
ArraysHashCode.multiints 1 15 0.740 ± 0.000 0.739 ± 0.000 ns/op 1.00x (p = 0.000*)
ArraysHashCode.multiints 10 15 2.919 ± 0.002 2.953 ± 0.059 ns/op 0.99x (p = 0.033 )
ArraysHashCode.multiints 100 15 32.140 ± 0.011 32.094 ± 0.004 ns/op 1.00x (p = 0.000*)
ArraysHashCode.multiints 10000 15 4918.911 ± 3.512 4913.884 ± 11.618 ns/op 1.00x (p = 0.105 )
ArraysHashCode.multishorts 1 15 0.740 ± 0.001 0.739 ± 0.000 ns/op 1.00x (p = 0.000*)
ArraysHashCode.multishorts 10 15 2.736 ± 0.002 2.733 ± 0.008 ns/op 1.00x (p = 0.159 )
ArraysHashCode.multishorts 100 15 32.162 ± 0.033 32.105 ± 0.008 ns/op 1.00x (p = 0.000*)
ArraysHashCode.multishorts 10000 15 4916.984 ± 3.276 4912.000 ± 11.479 ns/op 1.00x (p = 0.103 )
ArraysHashCode.shorts 1 15 0.711 ± 0.023 0.709 ± 0.016 ns/op 1.00x (p = 0.818 )
ArraysHashCode.shorts 10 15 3.745 ± 0.003 3.739 ± 0.010 ns/op 1.00x (p = 0.049 )
ArraysHashCode.shorts 100 15 69.725 ± 0.082 69.620 ± 0.051 ns/op 1.00x (p = 0.000*)
ArraysHashCode.shorts 10000 15 9370.882 ± 8.306 9356.215 ± 3.996 ns/op 1.00x (p = 0.000*)
* = significant
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/19414#discussion_r1618821363
More information about the hotspot-compiler-dev
mailing list