RFR: JDK-8311009: Long.toUnsignedString(long, int) doesn't have to create a BigInteger

Tingjun Yuan duke at openjdk.org
Wed Jun 28 07:57:51 UTC 2023


On Mon, 26 Jun 2023 14:58:56 GMT, Tingjun Yuan <duke at openjdk.org> wrote:

> This PR changes the implementation of `Long.toUnsignedString(long, int)` for "default" radices, which avoids creating a `BigInteger` and makes use of `Long.divideUnsigned` and `Long.remainderUnsigned`.
> 
> I've run the test on `test/jdk/java/lang/Long/Unsigned.java` and it works correctly. I believe that there is no need to add more test cases.
> 
> I've add a benchmark case to `test/micro/org/openjdk/bench/java/lang/Longs.java` for this method. Here is the benchmark result tested on my machine:
> 
> Before (JDK 20.0.1):
> 
> 
> Benchmark                       (size)  Mode  Cnt     Score    Error  Units
> Longs.toUnsignedStringNegative     500  avgt   15  6428.711 ± 63.142  us/op
> 
> 
> After:
> 
> 
> Benchmark                       (size)  Mode  Cnt     Score     Error  Units
> Longs.toUnsignedStringNegative     500  avgt   15  3823.655 ± 146.171  us/op
> 
> 
> I've submitted a bug report for this to the [Java Bug Database](https://bugs.java.com/bugdatabase/). No CSR needed since the behavior is not changed.

BTW, do I need to remove `toUnsignedBigInteger` method (which is private and no longer used)?

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

PR Comment: https://git.openjdk.org/jdk/pull/14654#issuecomment-1610942630


More information about the core-libs-dev mailing list