RFR: 8312424: 80% throughput decrease in Arrays.hashCode(Object[]) after JDK-8312164
Glavo
duke at openjdk.org
Thu Jul 20 02:38:40 UTC 2023
On Thu, 20 Jul 2023 02:04:53 GMT, Chen Liang <liach at openjdk.org> wrote:
>>> A similar performance decrease have been discussed here: [#14752 (comment)](https://github.com/openjdk/jdk/pull/14752#discussion_r1250888931)
>>>
>>> Can you check whether adding `@ForceInline` on `Objects.equals` help with JIT? If it helps, then I think adding `@ForceInline` might be a better solution.
>>
>> I added `@ForceInline` on `Objects.hashCode(Object)`, but the JMH results did not change.
>
> @Glavo I have created a test case with polymorphic objects in an array: https://github.com/liachmodded/jdk/tree/explore/arrays-hash-poly
> Can you see if you can produce the same outcome on your patch, and how the existing `Objects.equals` behave on the polymorphicObjects case?
>
>
> Benchmark (size) Mode Cnt Score Error Units
> ArraysHashCode.objects 1 avgt 15 0.770 ± 0.011 ns/op
> ArraysHashCode.objects 10 avgt 15 4.704 ± 0.059 ns/op
> ArraysHashCode.objects 100 avgt 15 54.610 ± 0.384 ns/op
> ArraysHashCode.objects 10000 avgt 15 6053.742 ± 35.244 ns/op
>
>
>
> Benchmark (size) Mode Cnt Score Error Units
> ArraysHashCode.polymorphicObjects 1 avgt 15 0.921 ± 0.069 ns/op
> ArraysHashCode.polymorphicObjects 10 avgt 15 23.322 ± 1.076 ns/op
> ArraysHashCode.polymorphicObjects 100 avgt 15 211.325 ± 2.200 ns/op
> ArraysHashCode.polymorphicObjects 10000 avgt 15 81850.916 ± 2427.661 ns/op
@liach
JMH Result:
(JDK-8312164) (This PR)
Benchmark (size) Mode Cnt Score Error Units Score Error Units
HashCode.polymorphicObjects 1 thrpt 5 148056.877 ± 8.046 ops/ms 546370.781 ± 2682.146 ops/ms
HashCode.polymorphicObjects 10 thrpt 5 21207.629 ± 39.585 ops/ms 21491.320 ± 66.698 ops/ms
HashCode.polymorphicObjects 100 thrpt 5 1467.886 ± 21.025 ops/ms 1509.838 ± 11.098 ops/ms
HashCode.polymorphicObjects 10000 thrpt 5 9.037 ± 0.006 ops/ms 9.123 ± 0.022 ops/ms
It looks like calling `Objects.hashCode(Object)` is preventing the JIT from monomorphizing.
-------------
PR Comment: https://git.openjdk.org/jdk/pull/14944#issuecomment-1643016889
More information about the core-libs-dev
mailing list