On Thu, 20 Jul 2023 01:11:43 GMT, Glavo <d...@openjdk.org> wrote:

> The changes to `Arrays.hashCode(Object[])` in JDK-8312164 caused its 
> performance  is reduced by about 80%.
> 
> This PR reverts this change.

JMH Benchmark:


public class HashCode {
    @Param({"1", "10", "100", "10000"})
    private int size;

    private Object[] objects;

    @Setup
    public void setup() {
        objects = new Object[size];

        Random rnd = new Random(0);
        for (int i = 0; i < size; i++) {
            int next = rnd.nextInt();
            objects[i] = next;
        }
    }
    @Benchmark
    public int objects() {
        return Arrays.hashCode(objects);
    }
}



                                                (JDK-8312164)                   
   (This PR)
Benchmark         (size)   Mode  Cnt       Score      Error   Units           
Score      Error   Units
HashCode.objects       1  thrpt    5  230185.853 ± 3452.863  ops/ms      
646049.006 ± 3964.138  ops/ms
HashCode.objects      10  thrpt    5   25745.466 ±   38.342  ops/ms      
121587.901 ± 1114.723  ops/ms
HashCode.objects     100  thrpt    5    2558.474 ±   21.726  ops/ms       
11914.620 ±  233.365  ops/ms
HashCode.objects   10000  thrpt    5      27.592 ±    0.116  ops/ms         
125.938 ±    0.145  ops/ms

> 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.

-------------

PR Comment: https://git.openjdk.org/jdk/pull/14944#issuecomment-1642962527
PR Comment: https://git.openjdk.org/jdk/pull/14944#issuecomment-1642971201

Reply via email to