<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