<i18n dev> 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 i18n-dev mailing list