On Thu, 14 Sep 2023 11:19:08 GMT, 温绍锦 <d...@openjdk.org> wrote:

>> BigDecimal is a commonly used class in business development, It is often 
>> necessary to perform toString or toPlainString operations on BigDecimal.
>> 
>> The current version uses StringBuilder resulting in multiple memory 
>> allocations, I made a modification to improve performance.
>> 
>> Because BigDecimal uses stringCache to cache the result of toString, the 
>> performance of toString needs special treatment before testing, such as 
>> clearing stringCache by unsafe operation before each test, The performance 
>> of toString is similar to that of toEngineering.
>> 
>> The performance data is as follows: 
>> 
>> ## 1. benchmark script
>> 
>> sh make/devkit/createJMHBundle.sh
>> bash configure --with-jmh=build/jmh/jars
>> make test TEST="micro:java.math.BigDecimals.*ToPlainString"
>> make test TEST="micro:java.math.BigDecimals.*ToEngineering"
>> 
>> 
>> ## 2. benchmark environment
>> * virtual machine : 
>> [aliyun_ecs_c8i.xlarge](https://help.aliyun.com/zh/ecs/user-guide/overview-of-instance-families#c8i)
>> * cpu intel xeon sapphire rapids (x64)
>> 
>> ## 3. benchmark result
>> 
>> -BigDecimals.testHugeToPlainString         avgt   15   188.691 ±  0.822  
>> ns/op  (baseline)
>> -BigDecimals.testLargeToPlainString        avgt   15    36.656 ±  0.065  
>> ns/op
>> -BigDecimals.testSmallToPlainString        avgt   15    34.342 ±  0.068  
>> ns/op
>> -BigDecimals.testToPlainString             avgt   15  1719.494 ± 24.886  
>> ns/op
>> 
>> +Benchmark                                 Mode  Cnt     Score    Error  
>> Units (optimize)
>> +BigDecimals.testHugeToPlainString         avgt   15   133.972 ?  0.328  
>> ns/op (+40.84%)
>> +BigDecimals.testLargeToPlainString        avgt   15    14.957 ?  0.047  
>> ns/op (145.07%)
>> +BigDecimals.testSmallToPlainString        avgt   15    12.045 ?  0.036  
>> ns/op (+185.11)
>> +BigDecimals.testToPlainString             avgt   15  1643.500 ?  3.217  
>> ns/op (+4.62%)
>> 
>> -Benchmark                                 Mode  Cnt     Score    Error  
>> Units (baseline)
>> -BigDecimals.testHugeToEngineeringString   avgt   15   207.621 ±  5.018  
>> ns/op
>> -BigDecimals.testLargeToEngineeringString  avgt   15    35.658 ±  3.144  
>> ns/op
>> -BigDecimals.testSmallToEngineeringString  avgt   15    15.142 ±  0.053  
>> ns/op
>> -BigDecimals.testToEngineeringString       avgt   15  1813.959 ± 12.842  
>> ns/op
>> 
>> +Benchmark                                 Mode  Cnt     Score    Error  
>> Units (optimize)
>> +BigDecimals.testHugeToEngineeringString   avgt   15   142.110 ?  0.987  
>> ns/op (+45.09%)
>> +BigDecimals.testLargeToEngineeringStr...
>
> 温绍锦 has updated the pull request incrementally with one additional commit 
> since the last revision:
> 
>   revert JavaLangAccess and use DecimalDigits

BigDecimal#toString is a common scenario. Can anyone help me continue the 
review? If someone thinks this PR changes too much, I can split it into 
multiple pull requests.

@cl4es @jddarcy

-------------

PR Comment: https://git.openjdk.org/jdk/pull/15555#issuecomment-1725359433

Reply via email to