<i18n dev> RFR: 8335791: Speed up j.u.Formatter & String.format [v4]
Roger Riggs
rriggs at openjdk.org
Mon Jul 22 14:39:33 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
Re-designing the formatting implementation should wait for the re-emergence of the templates project and implementation. It has similar performance goals and it would be beneficial to have a single implementation of the lower levels to avoid code duplication and take advantage of the optimizations.
-------------
PR Comment: https://git.openjdk.org/jdk/pull/20055#issuecomment-2243122522
More information about the i18n-dev
mailing list