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