RFR: 8327791: Optimization for new BigDecimal(String) [v10]
Claes Redestad
redestad at openjdk.org
Tue Mar 12 14:05:17 UTC 2024
On Tue, 12 Mar 2024 13:07:26 GMT, Shaojin Wen <duke at openjdk.org> wrote:
>> The current BigDecimal(String) constructor calls String#toCharArray, which has a memory allocation.
>>
>>
>> public BigDecimal(String val) {
>> this(val.toCharArray(), 0, val.length()); // allocate char[]
>> }
>>
>>
>> When the length is greater than 18, create a char[]
>>
>>
>> boolean isCompact = (len <= MAX_COMPACT_DIGITS); // 18
>> if (!isCompact) {
>> // ...
>> } else {
>> char[] coeff = new char[len]; // allocate char[]
>> // ...
>> }
>>
>>
>> This PR eliminates the two memory allocations mentioned above, resulting in an approximate 60% increase in performance..
>
> Shaojin Wen has updated the pull request incrementally with one additional commit since the last revision:
>
> restore comment
I think splitting `CharArraySequence` into two versions is somewhat dubious as more observable types at call sites may mean the performance gain in targeted micros is lost. How much of an improvement did you observe from this? Again the `char[]` constructors is probably less performance sensitive than the others.
-------------
PR Comment: https://git.openjdk.org/jdk/pull/18177#issuecomment-1991727125
More information about the core-libs-dev
mailing list