<i18n dev> RFR: 8278642: Refactor java.util.Formatter
Claes Redestad
redestad at openjdk.java.net
Thu Dec 16 11:49:59 UTC 2021
On Tue, 14 Dec 2021 00:14:32 GMT, Claes Redestad <redestad at openjdk.org> wrote:
> A few refactorings to how `java.util.Formatter` sets up `FormatString`s, aligning the implementation with changes explored by the TemplatedStrings JEP and ever so slightly improving performance:
>
> - turn `Flags` into an `int` (fewer allocations in the complex case)
> - remove some superfluous varargs: `checkBadFlags(Flags.PARENTHESES, ...` -> `checkBadFlags(Flags.Parentheses | ...` - again less allocations in the complex cases since these varargs arrays were being allocated. Also improves error messages since all bad flags will be listed in the exception message.
> - make `FormatSpecifier` and `FixedString` static, reducing size of these objects slightly.
>
> Baseline:
>
> Benchmark Mode Cnt Score Error Units
> StringFormat.complexFormat avgt 25 8977.043 ± 246.810 ns/op
> StringFormat.complexFormat:·gc.alloc.rate.norm avgt 25 2144.170 ± 0.012 B/op
> StringFormat.stringFormat avgt 25 252.109 ± 2.732 ns/op
> StringFormat.stringFormat:·gc.alloc.rate.norm avgt 25 256.019 ± 0.001 B/op
> StringFormat.stringIntFormat avgt 25 576.423 ± 4.596 ns/op
> StringFormat.stringIntFormat:·gc.alloc.rate.norm avgt 25 432.034 ± 0.002 B/op
> StringFormat.widthStringFormat avgt 25 999.835 ± 20.127 ns/op
> StringFormat.widthStringFormat:·gc.alloc.rate.norm avgt 25 525.509 ± 14.742 B/op
> StringFormat.widthStringIntFormat avgt 25 1332.163 ± 30.901 ns/op
> StringFormat.widthStringIntFormat:·gc.alloc.rate.norm avgt 25 720.715 ± 8.798 B/op
>
>
> Patch:
>
> Benchmark Mode Cnt Score Error Units
> StringFormat.complexFormat avgt 25 8840.089 ± 51.222 ns/op
> StringFormat.complexFormat:·gc.alloc.rate.norm avgt 25 1736.151 ± 0.009 B/op
> StringFormat.stringFormat avgt 25 247.310 ± 2.091 ns/op
> StringFormat.stringFormat:·gc.alloc.rate.norm avgt 25 248.018 ± 0.001 B/op
> StringFormat.stringIntFormat avgt 25 565.487 ± 6.572 ns/op
> StringFormat.stringIntFormat:·gc.alloc.rate.norm avgt 25 408.032 ± 0.002 B
> StringFormat.widthStringFormat avgt 25 970.015 ± 32.915 ns/op
> StringFormat.widthStringFormat:·gc.alloc.rate.norm avgt 25 449.991 ± 25.716 B/op
> StringFormat.widthStringIntFormat avgt 25 1284.572 ± 28.829 ns/op
> StringFormat.widthStringIntFormat:·gc.alloc.rate.norm avgt 25 636.872 ± 7.331 B/op
Re-ran tier1+2 in our CI due to the mystery error in GHA testing. All passed.
-------------
PR: https://git.openjdk.java.net/jdk/pull/6821
More information about the i18n-dev
mailing list