RFR 8209171 : Simplify Java implementation of Integer/Long.numberOfTrailingZeros()

Martin Buchholz martinrb at google.com
Fri Aug 10 00:13:58 UTC 2018


On Thu, Aug 9, 2018 at 4:15 PM, Ivan Gerasimov <ivan.gerasimov at oracle.com>
wrote:

> Hello!
>
> Integer.numberOfTrailingZeros() and Long.numberOfTrailingZeros() are
> intrinsified by Hotspot, so the Java implementation of these is not too
> important.
> However, they still can be improved by a tiny bit :)
>
> Could you please help review the fix?
>
> Bug: https://bugs.openjdk.java.net/browse/JDK-8209171
> Webrev: http://cr.openjdk.java.net/~igerasim/8209171/00/webrev/
> Benchmark for Integer: http://cr.openjdk.java.net/~ig
> erasim/8209171/00/bench/int/MyBenchmark.java
> Benchmark for Long: http://cr.openjdk.java.net/~ig
> erasim/8209171/00/bench/long/MyBenchmark.java
>
> The resulting code is both smaller and faster.  It may also help to warm
> up Integer.numberOfLeadingZeros() quicker.
>
> On average, the new Integer.numberOfTrailingZeros() has got +11% to
> performance for -client and +1% for -server.
> Long.numberOfTrailingZeros() is faster on 17% for -client and +20% for
> -server.


It seems to me the benchmark is not entirely fair to the old java
implementation, since the new one gets the benefit of the intrinsification
of  numberOfLeadingZeros.  A fairer comparison would use turn off
intrinsification of both.

I guess benchmarking on 32-bit platforms is  no longer relevant, given that
they are all legacy now.


More information about the core-libs-dev mailing list