8229845: Decrease memory consumption of BigInteger.toString()

Ivan Gerasimov ivan.gerasimov at oracle.com
Thu Aug 22 02:38:19 UTC 2019


Hi Brian!

A couple of comments

1)
3974         if (signum == 0) {
3975             buf.append('0');
3976             return;
3977         }

Shouldn't it be padded with zeroes, if digits > 0?
If I'm not mistaken, it could happen if result[1] at the end of 
toString() happens to be ZERO.

It that's true, then it may be a good idea to add a testcase for a 
number with many trailing zeros in a string representation.
Currently, test/jdk/java/math/BigInteger/BigIntegerTest.java in 
stringConv() operates on random numbers, which are unlikely to have huge 
number of trailing zeros.

2)
4120     /* zero is a string of NUM_ZEROS consecutive zeros. */
4121     private static final String zeros = "0".repeat(NUM_ZEROS);

Nit in the comment:  name of the constant should be zero*s*.

With kind regards,
Ivan


On 8/21/19 5:28 PM, Brian Burkhalter wrote:
> Hello,
>
>> On Aug 20, 2019, at 4:31 PM, Brian Burkhalter <brian.burkhalter at oracle.com> wrote:
>>
>>> On Aug 20, 2019, at 2:45 PM, Ivan Gerasimov <ivan.gerasimov at oracle.com <mailto:ivan.gerasimov at oracle.com>> wrote:
>>>
>>> Would it make sense to add an argument `digits` to smallToString (like the same named argument of toString, the minimum number of digits to pad to), so it could zero-pad the result itself?
>>>
>>> This way we could avoid inserting zeros into the middle of a StringBuilder after a call to smallToString.
>> Indeed I do not like the zero insertion either. I’ll investigate your idea.
> I modified the patch so that characters are exclusively appended to the StringBuilder thereby eliminating copying of characters which are already present after the insertion point, viz., the padding with zeros after calling smallToString() in the recursive path. A delta versus version .01 is at [1] and the diff versus the tip at [2].
>
> Thanks,
>
> Brian
>
> [1] http://cr.openjdk.java.net/~bpb/8229845/webrev.01-02/
> [2] http://cr.openjdk.java.net/~bpb/8229845/webrev.02/

-- 
With kind regards,
Ivan Gerasimov



More information about the core-libs-dev mailing list