<i18n dev> RFR: 8335791: Speed up j.u.Formatter & String.format [v4]
Shaojin Wen
duke at openjdk.org
Sat Jul 6 00:54:35 UTC 2024
On Sat, 6 Jul 2024 00:15:04 GMT, Shaojin Wen <duke at openjdk.org> wrote:
>> String.format is widely used, and improving its performance is very meaningful. This PR can significantly improve the performance of String.format. Sorry, there are many changes, which will take a lot of time. I hope you can review it patiently.
>>
>>
>> Improved performance includes the following:
>>
>> ## 1. Write directly during the parse process to reduce object allocation.
>>
>> In the current Formatter implementation, some objects do not need to be allocated, such as:
>>
>>
>> class Formatter {
>> public Formatter format(Locale l, String format, Object ... args) {
>> List<FormatString> fsa = parse(format);
>> // ...
>> }
>>
>> static List<FormatString> parse(String s) {
>> ArrayList<FormatString> al = new ArrayList<>();
>>
>> while (i < max) {
>> int n = s.indexOf('%', i);
>> if (n < 0) {
>> //
>> al.add(new FixedString(s, i, max));
>> }
>> }
>> }
>> }
>>
>> In the process of parsing, the content that is not a Specifier is directly appended without going through FixedString. By directly printing the parsed FormatString object, there is no need to construct a `List<FormatString> fsa` to store it.
>>
>> ## 2. Fast path print
>> Use specialized FormatString implementations for single-character and single-width specifiers to avoid calling the large FormatSpecifier#print method.
>>
>> ## 3. String.format directly calls j.u.Formatter
>> String.format directly calls j.u.Formatter via SharedSecrets to improve performance
>
> Shaojin Wen has updated the pull request incrementally with one additional commit since the last revision:
>
> Implementing JavaUtilFormatterAccess using anonymous class
The performance degradation of decimalFormat only occurred on the MacBook M1, and it did not occur when I tested it on the cloud host.
## [Aliyun ecs.c8a](https://help.aliyun.com/zh/ecs/user-guide/overview-of-instance-families#c8a)
* CPU AMD EPYCTM Genoa
* Platform x64
# baseline b83766e59063a41ea8801ac9e7c15dce67727c62
-Benchmark Mode Cnt Score Error Units
-StringFormat.complexFormat avgt 15 590.667 ± 17.059 ns/op
-StringFormat.decimalFormat avgt 15 293.412 ± 2.359 ns/op
-StringFormat.intFormat avgt 15 66.778 ± 0.865 ns/op
-StringFormat.intFormatUtf16 avgt 15 69.233 ± 0.090 ns/op
-StringFormat.intHexFormat avgt 15 116.871 ± 0.783 ns/op
-StringFormat.intHexFormatUtf16 avgt 15 130.486 ± 0.749 ns/op
-StringFormat.intHexUFormat avgt 15 122.547 ± 0.952 ns/op
-StringFormat.intHexUFormatUtf16 avgt 15 133.570 ± 2.035 ns/op
-StringFormat.intIntFormat avgt 15 118.463 ± 2.773 ns/op
-StringFormat.intIntFormatUtf16 avgt 15 120.305 ± 0.973 ns/op
-StringFormat.intOctalFormat avgt 15 117.049 ± 1.190 ns/op
-StringFormat.intOctalFormatUtf16 avgt 15 131.041 ± 2.719 ns/op
-StringFormat.lineFormat avgt 15 46.440 ± 0.355 ns/op
-StringFormat.lineFormatUtf16 avgt 15 51.169 ± 0.308 ns/op
-StringFormat.stringFormat avgt 15 50.507 ± 1.189 ns/op
-StringFormat.stringFormatUtf16 avgt 15 54.684 ± 0.136 ns/op
-StringFormat.stringIntFormat avgt 15 107.311 ± 0.719 ns/op
-StringFormat.stringIntFormatUtf16 avgt 15 115.677 ± 2.801 ns/op
-StringFormat.stringIntHexFormat avgt 15 103.388 ± 0.585 ns/op
-StringFormat.stringIntHexUFormat avgt 15 103.773 ± 0.215 ns/op
-StringFormat.stringIntOctalFormat avgt 15 103.900 ± 0.931 ns/op
-StringFormat.stringIntOctalFormatUtf16 avgt 15 116.362 ± 1.118 ns/op
-StringFormat.stringIntRFormat avgt 15 127.924 ± 0.122 ns/op
-StringFormat.stringIntRFormatUtf16 avgt 15 142.177 ± 3.507 ns/op
-StringFormat.stringWidthIntFormat avgt 15 142.864 ± 2.229 ns/op
-StringFormat.stringWidthIntFormatUtf16 avgt 15 141.588 ± 0.745 ns/op
-StringFormat.widthStringFormat avgt 15 62.167 ± 0.439 ns/op
-StringFormat.widthStringFormatUtf16 avgt 15 67.403 ± 0.804 ns/op
-StringFormat.widthStringIntFormat avgt 15 136.524 ± 0.521 ns/op
-StringFormat.widthStringIntFormatUtf16 avgt 15 138.060 ± 2.828 ns/op
# current b2f517ba459c55b2d69fe5a43723d15370cdab4b
+Benchmark Mode Cnt Score Error Units
+StringFormat.complexFormat avgt 15 412.950 ± 26.777 ns/op
+StringFormat.decimalFormat avgt 15 260.532 ± 2.942 ns/op
+StringFormat.intFormat avgt 15 24.184 ± 1.125 ns/op
+StringFormat.intFormatUtf16 avgt 15 27.183 ± 0.151 ns/op
+StringFormat.intHexFormat avgt 15 55.386 ± 0.344 ns/op
+StringFormat.intHexFormatUtf16 avgt 15 70.344 ± 1.067 ns/op
+StringFormat.intHexUFormat avgt 15 61.599 ± 2.133 ns/op
+StringFormat.intHexUFormatUtf16 avgt 15 80.965 ± 6.596 ns/op
+StringFormat.intIntFormat avgt 15 53.510 ± 0.804 ns/op
+StringFormat.intIntFormatUtf16 avgt 15 53.795 ± 0.289 ns/op
+StringFormat.intOctalFormat avgt 15 65.075 ± 0.526 ns/op
+StringFormat.intOctalFormatUtf16 avgt 15 79.609 ± 2.225 ns/op
+StringFormat.lineFormat avgt 15 24.306 ± 0.061 ns/op
+StringFormat.lineFormatUtf16 avgt 15 28.136 ± 0.133 ns/op
+StringFormat.stringFormat avgt 15 24.137 ± 0.159 ns/op
+StringFormat.stringFormatUtf16 avgt 15 28.368 ± 0.065 ns/op
+StringFormat.stringIntFormat avgt 15 50.953 ± 0.121 ns/op
+StringFormat.stringIntFormatUtf16 avgt 15 62.363 ± 0.501 ns/op
+StringFormat.stringIntHexFormat avgt 15 59.528 ± 0.199 ns/op
+StringFormat.stringIntHexUFormat avgt 15 58.935 ± 0.515 ns/op
+StringFormat.stringIntOctalFormat avgt 15 68.614 ± 0.140 ns/op
+StringFormat.stringIntOctalFormatUtf16 avgt 15 80.326 ± 1.014 ns/op
+StringFormat.stringIntRFormat avgt 15 60.547 ± 0.743 ns/op
+StringFormat.stringIntRFormatUtf16 avgt 15 76.189 ± 3.493 ns/op
+StringFormat.stringWidthIntFormat avgt 15 57.070 ± 0.616 ns/op
+StringFormat.stringWidthIntFormatUtf16 avgt 15 68.253 ± 0.288 ns/op
+StringFormat.widthStringFormat avgt 15 24.473 ± 0.251 ns/op
+StringFormat.widthStringFormatUtf16 avgt 15 29.436 ± 0.050 ns/op
+StringFormat.widthStringIntFormat avgt 15 57.610 ± 0.535 ns/op
+StringFormat.widthStringIntFormatUtf16 avgt 15 65.597 ± 1.587 ns/op
| | baseline | current | delta |
| --- | --- | --- | --- |
| StringFormat.complexFormat | 590.667 | 412.950 | 43.04% |
| StringFormat.decimalFormat | 293.412 | 260.532 | 12.62% |
| StringFormat.intFormat | 66.778 | 24.184 | 176.12% |
| StringFormat.intFormatUtf16 | 69.233 | 27.183 | 154.69% |
| StringFormat.intHexFormat | 116.871 | 55.386 | 111.01% |
| StringFormat.intHexFormatUtf16 | 130.486 | 70.344 | 85.50% |
| StringFormat.intHexUFormat | 122.547 | 61.599 | 98.94% |
| StringFormat.intHexUFormatUtf16 | 133.570 | 80.965 | 64.97% |
| StringFormat.intIntFormat | 118.463 | 53.510 | 121.38% |
| StringFormat.intIntFormatUtf16 | 120.305 | 53.795 | 123.64% |
| StringFormat.intOctalFormat | 117.049 | 65.075 | 79.87% |
| StringFormat.intOctalFormatUtf16 | 131.041 | 79.609 | 64.61% |
| StringFormat.lineFormat | 46.440 | 24.306 | 91.06% |
| StringFormat.lineFormatUtf16 | 51.169 | 28.136 | 81.86% |
| StringFormat.stringFormat | 50.507 | 24.137 | 109.25% |
| StringFormat.stringFormatUtf16 | 54.684 | 28.368 | 92.77% |
| StringFormat.stringIntFormat | 107.311 | 50.953 | 110.61% |
| StringFormat.stringIntFormatUtf16 | 115.677 | 62.363 | 85.49% |
| StringFormat.stringIntHexFormat | 103.388 | 59.528 | 73.68% |
| StringFormat.stringIntHexUFormat | 103.773 | 58.935 | 76.08% |
| StringFormat.stringIntOctalFormat | 103.900 | 68.614 | 51.43% |
| StringFormat.stringIntOctalFormatUtf16 | 116.362 | 80.326 | 44.86% |
| StringFormat.stringIntRFormat | 127.924 | 60.547 | 111.28% |
| StringFormat.stringIntRFormatUtf16 | 142.177 | 76.189 | 86.61% |
| StringFormat.stringWidthIntFormat | 142.864 | 57.070 | 150.33% |
| StringFormat.stringWidthIntFormatUtf16 | 141.588 | 68.253 | 107.45% |
| StringFormat.widthStringFormat | 62.167 | 24.473 | 154.02% |
| StringFormat.widthStringFormatUtf16 | 67.403 | 29.436 | 128.98% |
| StringFormat.widthStringIntFormat | 136.524 | 57.610 | 136.98% |
| StringFormat.widthStringIntFormatUtf16 | 138.060 | 65.597 | 110.47% |
## [aliyun ecs.c8i](https://help.aliyun.com/zh/ecs/user-guide/overview-of-instance-families#c8i)
* CPU Intel® Xeon® Emerald
* Platform x64
# baseline b83766e59063a41ea8801ac9e7c15dce67727c62
-Benchmark Mode Cnt Score Error Units
-StringFormat.complexFormat avgt 15 529.057 ± 4.446 ns/op
-StringFormat.decimalFormat avgt 15 322.432 ± 1.405 ns/op
-StringFormat.intFormat avgt 15 65.234 ± 0.220 ns/op
-StringFormat.intFormatUtf16 avgt 15 70.822 ± 0.907 ns/op
-StringFormat.intHexFormat avgt 15 108.173 ± 0.526 ns/op
-StringFormat.intHexFormatUtf16 avgt 15 123.867 ± 0.686 ns/op
-StringFormat.intHexUFormat avgt 15 112.425 ± 0.841 ns/op
-StringFormat.intHexUFormatUtf16 avgt 15 128.555 ± 1.833 ns/op
-StringFormat.intIntFormat avgt 15 117.720 ± 1.043 ns/op
-StringFormat.intIntFormatUtf16 avgt 15 119.817 ± 1.976 ns/op
-StringFormat.intOctalFormat avgt 15 108.340 ± 0.417 ns/op
-StringFormat.intOctalFormatUtf16 avgt 15 121.281 ± 2.423 ns/op
-StringFormat.lineFormat avgt 15 46.437 ± 0.146 ns/op
-StringFormat.lineFormatUtf16 avgt 15 52.059 ± 0.268 ns/op
-StringFormat.stringFormat avgt 15 48.699 ± 0.266 ns/op
-StringFormat.stringFormatUtf16 avgt 15 55.069 ± 0.295 ns/op
-StringFormat.stringIntFormat avgt 15 97.408 ± 0.855 ns/op
-StringFormat.stringIntFormatUtf16 avgt 15 113.801 ± 1.206 ns/op
-StringFormat.stringIntHexFormat avgt 15 95.091 ± 0.540 ns/op
-StringFormat.stringIntHexUFormat avgt 15 94.368 ± 0.389 ns/op
-StringFormat.stringIntOctalFormat avgt 15 94.731 ± 0.592 ns/op
-StringFormat.stringIntOctalFormatUtf16 avgt 15 107.460 ± 0.100 ns/op
-StringFormat.stringIntRFormat avgt 15 114.745 ± 0.211 ns/op
-StringFormat.stringIntRFormatUtf16 avgt 15 132.979 ± 3.001 ns/op
-StringFormat.stringWidthIntFormat avgt 15 129.590 ± 0.719 ns/op
-StringFormat.stringWidthIntFormatUtf16 avgt 15 134.643 ± 2.166 ns/op
-StringFormat.widthStringFormat avgt 15 60.557 ± 0.716 ns/op
-StringFormat.widthStringFormatUtf16 avgt 15 67.925 ± 0.798 ns/op
-StringFormat.widthStringIntFormat avgt 15 125.359 ± 1.424 ns/op
-StringFormat.widthStringIntFormatUtf16 avgt 15 131.336 ± 1.519 ns/op
# current b2f517ba459c55b2d69fe5a43723d15370cdab4b
+Benchmark Mode Cnt Score Error Units
+StringFormat.complexFormat avgt 15 386.754 ± 7.144 ns/op
+StringFormat.decimalFormat avgt 15 289.619 ± 2.738 ns/op
+StringFormat.intFormat avgt 15 25.465 ± 2.249 ns/op
+StringFormat.intFormatUtf16 avgt 15 31.938 ± 1.428 ns/op
+StringFormat.intHexFormat avgt 15 51.730 ± 1.685 ns/op
+StringFormat.intHexFormatUtf16 avgt 15 71.242 ± 1.330 ns/op
+StringFormat.intHexUFormat avgt 15 57.009 ± 0.636 ns/op
+StringFormat.intHexUFormatUtf16 avgt 15 75.337 ± 0.378 ns/op
+StringFormat.intIntFormat avgt 15 52.773 ± 0.163 ns/op
+StringFormat.intIntFormatUtf16 avgt 15 52.769 ± 0.131 ns/op
+StringFormat.intOctalFormat avgt 15 58.615 ± 0.456 ns/op
+StringFormat.intOctalFormatUtf16 avgt 15 75.639 ± 0.689 ns/op
+StringFormat.lineFormat avgt 15 23.287 ± 0.093 ns/op
+StringFormat.lineFormatUtf16 avgt 15 30.649 ± 0.150 ns/op
+StringFormat.stringFormat avgt 15 22.710 ± 0.055 ns/op
+StringFormat.stringFormatUtf16 avgt 15 30.146 ± 0.114 ns/op
+StringFormat.stringIntFormat avgt 15 50.326 ± 0.122 ns/op
+StringFormat.stringIntFormatUtf16 avgt 15 62.278 ± 1.169 ns/op
+StringFormat.stringIntHexFormat avgt 15 56.447 ± 0.280 ns/op
+StringFormat.stringIntHexUFormat avgt 15 56.390 ± 0.641 ns/op
+StringFormat.stringIntOctalFormat avgt 15 67.885 ± 0.603 ns/op
+StringFormat.stringIntOctalFormatUtf16 avgt 15 78.597 ± 1.861 ns/op
+StringFormat.stringIntRFormat avgt 15 56.320 ± 0.581 ns/op
+StringFormat.stringIntRFormatUtf16 avgt 15 75.227 ± 2.130 ns/op
+StringFormat.stringWidthIntFormat avgt 15 54.156 ± 0.110 ns/op
+StringFormat.stringWidthIntFormatUtf16 avgt 15 68.158 ± 2.946 ns/op
+StringFormat.widthStringFormat avgt 15 23.148 ± 0.150 ns/op
+StringFormat.widthStringFormatUtf16 avgt 15 31.589 ± 0.283 ns/op
+StringFormat.widthStringIntFormat avgt 15 57.852 ± 0.495 ns/op
+StringFormat.widthStringIntFormatUtf16 avgt 15 69.162 ± 2.344 ns/op
| | baseline | current | delta |
| --- | --- | --- | --- |
| StringFormat.complexFormat | 529.057 | 386.754 | 36.79% |
| StringFormat.decimalFormat | 322.432 | 289.619 | 11.33% |
| StringFormat.intFormat | 65.234 | 25.465 | 156.17% |
| StringFormat.intFormatUtf16 | 70.822 | 31.938 | 121.75% |
| StringFormat.intHexFormat | 108.173 | 51.730 | 109.11% |
| StringFormat.intHexFormatUtf16 | 123.867 | 71.242 | 73.87% |
| StringFormat.intHexUFormat | 112.425 | 57.009 | 97.21% |
| StringFormat.intHexUFormatUtf16 | 128.555 | 75.337 | 70.64% |
| StringFormat.intIntFormat | 117.720 | 52.773 | 123.07% |
| StringFormat.intIntFormatUtf16 | 119.817 | 52.769 | 127.06% |
| StringFormat.intOctalFormat | 108.340 | 58.615 | 84.83% |
| StringFormat.intOctalFormatUtf16 | 121.281 | 75.639 | 60.34% |
| StringFormat.lineFormat | 46.437 | 23.287 | 99.41% |
| StringFormat.lineFormatUtf16 | 52.059 | 30.649 | 69.86% |
| StringFormat.stringFormat | 48.699 | 22.710 | 114.44% |
| StringFormat.stringFormatUtf16 | 55.069 | 30.146 | 82.67% |
| StringFormat.stringIntFormat | 97.408 | 50.326 | 93.55% |
| StringFormat.stringIntFormatUtf16 | 113.801 | 62.278 | 82.73% |
| StringFormat.stringIntHexFormat | 95.091 | 56.447 | 68.46% |
| StringFormat.stringIntHexUFormat | 94.368 | 56.390 | 67.35% |
| StringFormat.stringIntOctalFormat | 94.731 | 67.885 | 39.55% |
| StringFormat.stringIntOctalFormatUtf16 | 107.460 | 78.597 | 36.72% |
| StringFormat.stringIntRFormat | 114.745 | 56.320 | 103.74% |
| StringFormat.stringIntRFormatUtf16 | 132.979 | 75.227 | 76.77% |
| StringFormat.stringWidthIntFormat | 129.590 | 54.156 | 139.29% |
| StringFormat.stringWidthIntFormatUtf16 | 134.643 | 68.158 | 97.55% |
| StringFormat.widthStringFormat | 60.557 | 23.148 | 161.61% |
| StringFormat.widthStringFormatUtf16 | 67.925 | 31.589 | 115.03% |
| StringFormat.widthStringIntFormat | 125.359 | 57.852 | 116.69% |
| StringFormat.widthStringIntFormatUtf16 | 131.336 | 69.162 | 89.90% |
## [aliyun ecs.c8y](https://help.aliyun.com/zh/ecs/user-guide/overview-of-instance-families#c8y)
* CPU Yitian710 aarch64
* Platform aarch64
# baseline b83766e59063a41ea8801ac9e7c15dce67727c62
-Benchmark Mode Cnt Score Error Units
-StringFormat.complexFormat avgt 15 773.031 ± 3.099 ns/op
-StringFormat.decimalFormat avgt 15 398.171 ± 4.713 ns/op
-StringFormat.intFormat avgt 15 103.018 ± 2.348 ns/op
-StringFormat.intFormatUtf16 avgt 15 119.492 ± 2.190 ns/op
-StringFormat.intHexFormat avgt 15 177.283 ± 3.302 ns/op
-StringFormat.intHexFormatUtf16 avgt 15 195.128 ± 9.053 ns/op
-StringFormat.intHexUFormat avgt 15 194.399 ± 7.280 ns/op
-StringFormat.intHexUFormatUtf16 avgt 15 200.689 ± 4.014 ns/op
-StringFormat.intIntFormat avgt 15 180.146 ± 1.970 ns/op
-StringFormat.intIntFormatUtf16 avgt 15 195.222 ± 13.176 ns/op
-StringFormat.intOctalFormat avgt 15 174.285 ± 8.477 ns/op
-StringFormat.intOctalFormatUtf16 avgt 15 186.157 ± 3.778 ns/op
-StringFormat.lineFormat avgt 15 82.938 ± 0.863 ns/op
-StringFormat.lineFormatUtf16 avgt 15 94.125 ± 0.790 ns/op
-StringFormat.stringFormat avgt 15 81.651 ± 4.897 ns/op
-StringFormat.stringFormatUtf16 avgt 15 98.348 ± 0.773 ns/op
-StringFormat.stringIntFormat avgt 15 167.333 ± 1.800 ns/op
-StringFormat.stringIntFormatUtf16 avgt 15 190.981 ± 4.937 ns/op
-StringFormat.stringIntHexFormat avgt 15 157.498 ± 3.696 ns/op
-StringFormat.stringIntHexUFormat avgt 15 160.588 ± 3.764 ns/op
-StringFormat.stringIntOctalFormat avgt 15 160.813 ± 2.398 ns/op
-StringFormat.stringIntOctalFormatUtf16 avgt 15 176.153 ± 7.430 ns/op
-StringFormat.stringIntRFormat avgt 15 187.924 ± 0.902 ns/op
-StringFormat.stringIntRFormatUtf16 avgt 15 202.559 ± 2.601 ns/op
-StringFormat.stringWidthIntFormat avgt 15 194.698 ± 4.673 ns/op
-StringFormat.stringWidthIntFormatUtf16 avgt 15 233.417 ± 5.496 ns/op
-StringFormat.widthStringFormat avgt 15 100.334 ± 0.915 ns/op
-StringFormat.widthStringFormatUtf16 avgt 15 113.190 ± 13.681 ns/op
-StringFormat.widthStringIntFormat avgt 15 211.096 ± 1.347 ns/op
-StringFormat.widthStringIntFormatUtf16 avgt 15 227.000 ± 10.045 ns/op
# current b2f517ba459c55b2d69fe5a43723d15370cdab4b
+Benchmark Mode Cnt Score Error Units
+StringFormat.complexFormat avgt 15 581.514 ± 13.122 ns/op
+StringFormat.decimalFormat avgt 15 348.420 ± 1.901 ns/op
+StringFormat.intFormat avgt 15 29.603 ± 0.325 ns/op
+StringFormat.intFormatUtf16 avgt 15 35.211 ± 0.459 ns/op
+StringFormat.intHexFormat avgt 15 68.486 ± 0.894 ns/op
+StringFormat.intHexFormatUtf16 avgt 15 94.581 ± 8.873 ns/op
+StringFormat.intHexUFormat avgt 15 77.773 ± 1.939 ns/op
+StringFormat.intHexUFormatUtf16 avgt 15 95.887 ± 1.966 ns/op
+StringFormat.intIntFormat avgt 15 70.615 ± 1.438 ns/op
+StringFormat.intIntFormatUtf16 avgt 15 66.945 ± 2.027 ns/op
+StringFormat.intOctalFormat avgt 15 80.453 ± 1.638 ns/op
+StringFormat.intOctalFormatUtf16 avgt 15 102.267 ± 3.882 ns/op
+StringFormat.lineFormat avgt 15 29.769 ± 0.634 ns/op
+StringFormat.lineFormatUtf16 avgt 15 35.713 ± 1.031 ns/op
+StringFormat.stringFormat avgt 15 28.574 ± 0.458 ns/op
+StringFormat.stringFormatUtf16 avgt 15 35.554 ± 0.496 ns/op
+StringFormat.stringIntFormat avgt 15 62.198 ± 3.217 ns/op
+StringFormat.stringIntFormatUtf16 avgt 15 89.910 ± 3.620 ns/op
+StringFormat.stringIntHexFormat avgt 15 67.230 ± 1.309 ns/op
+StringFormat.stringIntHexUFormat avgt 15 66.143 ± 1.140 ns/op
+StringFormat.stringIntOctalFormat avgt 15 78.613 ± 1.046 ns/op
+StringFormat.stringIntOctalFormatUtf16 avgt 15 104.297 ± 4.769 ns/op
+StringFormat.stringIntRFormat avgt 15 67.872 ± 1.229 ns/op
+StringFormat.stringIntRFormatUtf16 avgt 15 93.982 ± 1.778 ns/op
+StringFormat.stringWidthIntFormat avgt 15 70.326 ± 3.684 ns/op
+StringFormat.stringWidthIntFormatUtf16 avgt 15 88.422 ± 5.396 ns/op
+StringFormat.widthStringFormat avgt 15 28.349 ± 0.462 ns/op
+StringFormat.widthStringFormatUtf16 avgt 15 35.467 ± 0.370 ns/op
+StringFormat.widthStringIntFormat avgt 15 68.397 ± 3.443 ns/op
+StringFormat.widthStringIntFormatUtf16 avgt 15 86.467 ± 3.557 ns/op
| | baseline | current | delta |
| --- | --- | --- | --- |
| StringFormat.complexFormat | 773.031 | 581.514 | 32.93% |
| StringFormat.decimalFormat | 398.171 | 348.420 | 14.28% |
| StringFormat.intFormat | 103.018 | 29.603 | 248.00% |
| StringFormat.intFormatUtf16 | 119.492 | 35.211 | 239.36% |
| StringFormat.intHexFormat | 177.283 | 68.486 | 158.86% |
| StringFormat.intHexFormatUtf16 | 195.128 | 94.581 | 106.31% |
| StringFormat.intHexUFormat | 194.399 | 77.773 | 149.96% |
| StringFormat.intHexUFormatUtf16 | 200.689 | 95.887 | 109.30% |
| StringFormat.intIntFormat | 180.146 | 70.615 | 155.11% |
| StringFormat.intIntFormatUtf16 | 195.222 | 66.945 | 191.62% |
| StringFormat.intOctalFormat | 174.285 | 80.453 | 116.63% |
| StringFormat.intOctalFormatUtf16 | 186.157 | 102.267 | 82.03% |
| StringFormat.lineFormat | 82.938 | 29.769 | 178.61% |
| StringFormat.lineFormatUtf16 | 94.125 | 35.713 | 163.56% |
| StringFormat.stringFormat | 81.651 | 28.574 | 185.75% |
| StringFormat.stringFormatUtf16 | 98.348 | 35.554 | 176.62% |
| StringFormat.stringIntFormat | 167.333 | 62.198 | 169.03% |
| StringFormat.stringIntFormatUtf16 | 190.981 | 89.910 | 112.41% |
| StringFormat.stringIntHexFormat | 157.498 | 67.230 | 134.27% |
| StringFormat.stringIntHexUFormat | 160.588 | 66.143 | 142.79% |
| StringFormat.stringIntOctalFormat | 160.813 | 78.613 | 104.56% |
| StringFormat.stringIntOctalFormatUtf16 | 176.153 | 104.297 | 68.90% |
| StringFormat.stringIntRFormat | 187.924 | 67.872 | 176.88% |
| StringFormat.stringIntRFormatUtf16 | 202.559 | 93.982 | 115.53% |
| StringFormat.stringWidthIntFormat | 194.698 | 70.326 | 176.85% |
| StringFormat.stringWidthIntFormatUtf16 | 233.417 | 88.422 | 163.98% |
| StringFormat.widthStringFormat | 100.334 | 28.349 | 253.92% |
| StringFormat.widthStringFormatUtf16 | 113.190 | 35.467 | 219.14% |
| StringFormat.widthStringIntFormat | 211.096 | 68.397 | 208.63% |
| StringFormat.widthStringIntFormatUtf16 | 227.000 | 86.467 | 162.53% |
-------------
PR Comment: https://git.openjdk.org/jdk/pull/20055#issuecomment-2211548388
More information about the i18n-dev
mailing list