<i18n dev> Integrated: 8333462: Performance regression of new DecimalFormat() when compare to jdk11

lingjun-cg duke at openjdk.org
Wed Jun 5 01:54:12 UTC 2024


On Tue, 4 Jun 2024 02:32:28 GMT, lingjun-cg <duke at openjdk.org> wrote:

> Run the below benchmark test  ,it show the average time of new DecimalFormat()  increase 18% when compare to jdk 11.
> 
> the result with jdk 11:
> 
> Benchmark                          Mode  Cnt    Score   Error  Units
> JmhDecimalFormat.testNewOnly       avgt   50  248.300 ? 5.158  ns/op
> 
> 
> the result with current jdk:
> 
> Benchmark                          Mode  Cnt    Score   Error  Units
> JmhDecimalFormat.testNewOnly       avgt   50  303.381 ? 5.252  ns/op
> 
> 
> 
> @BenchmarkMode(Mode.AverageTime)
> @Warmup(iterations = 5, time = 500, timeUnit = TimeUnit.MILLISECONDS)
> @Measurement(iterations = 10, time = 500, timeUnit = TimeUnit.MILLISECONDS)
> @State(Scope.Thread)
> @OutputTimeUnit(TimeUnit.NANOSECONDS)
> public class JmhDecimalFormat {
> 
>     @Setup(Level.Trial)
>     public void setup() {
>     }
> 
>     @Benchmark
>     public void testNewOnly() throws InterruptedException {
>         new DecimalFormat("#0.00000");
>     }
> }
> 
> 
> Compare the flame graph it shows the java.text.DecimalFormatSymbols#findNonFormatChar takes a significant time. 
> After replacing  the lambda implementation with a simple loop , it shows nearly the same performance as jdk 11.
> 
> 
> Benchmark                          Mode  Cnt    Score   Error  Units
> JmhDecimalFormat.testNewOnly       avgt   50  209.874 ? 9.951  ns/op
> 
> 
> [flame-graph-jdk11-jdk21.zip](https://github.com/user-attachments/files/15541764/flame-graph-jdk11-jdk21.zip)

This pull request has now been integrated.

Changeset: d8261279
Author:    lingjun.cg <lingjun.cg at alibaba-inc.com>
Committer: Denghui Dong <ddong at openjdk.org>
URL:       https://git.openjdk.org/jdk/commit/d826127970bd2ae8bf4cacc3c55634dc5af307c4
Stats:     8 lines in 1 file changed: 3 ins; 0 del; 5 mod

8333462: Performance regression of new DecimalFormat() when compare to jdk11

Reviewed-by: liach, naoto, jlu

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

PR: https://git.openjdk.org/jdk/pull/19534


More information about the i18n-dev mailing list