> 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)
lingjun-cg has updated the pull request incrementally with one additional commit since the last revision: 8333462: Performance regression of new DecimalFormat() when compare to jdk11 ------------- Changes: - all: https://git.openjdk.org/jdk/pull/19534/files - new: https://git.openjdk.org/jdk/pull/19534/files/a230ce00..d5b9ccfb Webrevs: - full: https://webrevs.openjdk.org/?repo=jdk&pr=19534&range=01 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=19534&range=00-01 Stats: 4 lines in 1 file changed: 1 ins; 0 del; 3 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