8229845: Decrease memory consumption of BigInteger.toString()

Brian Burkhalter brian.burkhalter at oracle.com
Fri Aug 23 20:33:31 UTC 2019


Hi Ivan,

> On Aug 23, 2019, at 12:41 PM, Ivan Gerasimov <ivan.gerasimov at oracle.com> wrote:
> 
> One minor comment.  Here:
> 3990             if (digits > 0) {
> 3991                 padWithZeros(buf, digits);
> 3992             } else {
> 3993                 buf.append('0');
> 3994             }
> 
> I cannot really see how digits may be <= 0, so it seems to me it can be safely replaced by just one line `padWithZeros(buf, digits);`.

Actually I don’t see how digits may be non-positive for signum == 0 either. I’ve reduced the above to one line (L3990) in [1]. That is the only change versus version .04.

> Alternatively, the entire branch `if (signum == 0) {` can be removed from smallToString (so that this method will only work with strictly positive numbers), and done only for results[1] at line 4083 because it is the only possible source of ZERO values in the process.
> 
> It also seems that the arithmetic in the very internal loop at 4005-4017 can be slightly optimized, but this probably can be left for another enhancement.

I think I’ll leave it as is for now.

Thanks!

Brian

[1] http://cr.openjdk.java.net/~bpb/8229845/webrev.05/


More information about the core-libs-dev mailing list