<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