<i18n dev> RFR: 8333462: Performance regression of new DecimalFormat() when compare to jdk11 [v2]
lingjun-cg
duke at openjdk.org
Wed Jun 5 01:54:12 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)
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
More information about the i18n-dev
mailing list