The name Hasher implies that it would be an object. Could it not be just a set of static methods?
Is there a library that does this for us? > On Jul 17, 2020, at 7:26 AM, Haisheng Yuan <[email protected]> wrote: > > +1 > I am not sure the difference will be observable in real Calcite application, > because object allocation in Java is pretty efficient. But it is always good > to avoid unnecessary object allocation and reduce GC pressure if we can > achieve it easily. > > On 2020/07/17 09:36:06, Vladimir Sitnikov <[email protected]> > wrote: >> 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 >>
