Hi, java.lang.Objects.hash is convenient, however, it does result in memory allocation for varargs.
In practice, it can easily be visible in the benchmarks (at least for Java 1.8), so I suggest we create our own API and use it instead of java.util.Objects#hash We can have "up to 10 overloads" (or whatever we need), so the hashcode won't need to allocate arrays. If no objections within a week or so, I will commit that fix, and I would add `java.util.Objects#hash` to the list of forbidden APIs. I'm ok if somebody else wants to pick this. --- Sample with a4fa05458840cfd: @Benchmark public RexNode baseline_eq() { return rex.makeCall( SqlStdOperatorTable.EQUALS, rex.makeInputRef(intType, 0), rex.makeInputRef(intType, 1)); } @Benchmark public int equals(Blackhole blackhole) { RexNode node = rex.makeCall( SqlStdOperatorTable.EQUALS, rex.makeInputRef(intType, 0), rex.makeInputRef(intType, 1)); blackhole.consume(node); return node.hashCode(); } ... Benchmark Mode Cnt Score Error Units baseline_equals avgt 5 222 ± 121 ns/op equals avgt 5 248 ± 68 ns/op greater_than avgt 5 275 ± 54 ns/op less_than avgt 5 224 ± 27 ns/op baseline_equals:·gc.alloc.rate.norm avgt 5 496 ± 0 B/op equals:·gc.alloc.rate.norm avgt 5 568 ± 0 B/op greater_than:·gc.alloc.rate.norm avgt 5 624 ± 0 B/op less_than:·gc.alloc.rate.norm avgt 5 520 ± 0 B/op Vladimir