8229845: Decrease memory consumption of BigInteger.toString()
Ivan Gerasimov
ivan.gerasimov at oracle.com
Fri Aug 23 19:41:10 UTC 2019
Hi Brian.
This looks good to me, thanks!
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);`.
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.
With kind regards,
Ivan
On 8/23/19 10:11 AM, Brian Burkhalter wrote:
> Hi Ivan,
>
>> On Aug 22, 2019, at 1:24 PM, Ivan Gerasimov
>> <ivan.gerasimov at oracle.com <mailto:ivan.gerasimov at oracle.com>> wrote:
>>
>> I have a few further suggestions how to simplify the code.
>>
>> […]
>
> Those are all good suggestions: thanks!
>
>> Here's the patch, which illustrates all the suggestions above:
>> http://cr.openjdk.java.net/~igerasim/8229845/00/webrev/
>> (I have only run the tests from test/jdk/java/math/BigInteger to
>> verify it).
>
> This patch has a problem:
> 4023 padWithZeros(buf, digits - s.length() + (numGroups - 1) *
> digitsPerLong[radix]);
> It is missing parentheses:
>
> 4023 padWithZeros(buf, digits - (s.length() + (numGroups - 1)
> * digitsPerLong[radix]));
>
> I was unable to find this by debugging but implemented your
> suggestions by hand and then found it by diff-ing the patches. My
> updated versions with your suggestions incorporated are: [1] delta,
> [2] absolute. I also increased the size of some of the values tested
> at line 798 of BigIntegerTest.
>
> Thanks,
>
> Brian
>
> [1] http://cr.openjdk.java.net/~bpb/8229845/webrev.03-04/
> [2] http://cr.openjdk.java.net/~bpb/8229845/webrev.04/
>
--
With kind regards,
Ivan Gerasimov
More information about the core-libs-dev
mailing list