Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8335791

Speed ​​up j.u.Formatter & String.format

XMLWordPrintable

    • Icon: Enhancement Enhancement
    • Resolution: Unresolved
    • Icon: P4 P4
    • None
    • None
    • core-libs
    • None

      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

            swen Shaojin Wen
            swen Shaojin Wen
            Votes:
            1 Vote for this issue
            Watchers:
            3 Start watching this issue

              Created:
              Updated: