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

lingjun-cg duke at openjdk.org
Tue Jun 4 02:39:24 UTC 2024


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)

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

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

Changes: https://git.openjdk.org/jdk/pull/19534/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=19534&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8333462
  Stats: 6 lines in 1 file changed: 2 ins; 0 del; 4 mod
  Patch: https://git.openjdk.org/jdk/pull/19534.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/19534/head:pull/19534

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


More information about the i18n-dev mailing list