<i18n dev> Withdrawn: 8335791: Speed ​​up j.u.Formatter & String.format

duke duke at openjdk.org
Thu Dec 26 19:42:45 UTC 2024


On Fri, 5 Jul 2024 15:40:24 GMT, Shaojin Wen <swen 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

This pull request has been closed without being integrated.

-------------

PR: https://git.openjdk.org/jdk/pull/20055


More information about the i18n-dev mailing list