Hi Claes, in the method Formatter$FormatSpecifier#justify(String) you can pre-calculate the capacity of the StringBuilder to avoid array copying, e.g. instead of
2931 StringBuilder sb = new StringBuilder(); use this one: 2931 StringBuilder sb = new StringBuilder(s.length() + sp); And in the method Formatter$FormatSpecifier#justify(StringBuilder) you can avoid creation of the StringBuilder object in the line 2956, e.g. instead of: 2956 StringBuilder tmp = new StringBuilder(sp); 2957 for (int i = 0; i < sp; i++) { 2958 tmp.append(' '); 2959 } 2960 sb.insert(0, tmp); you can write this: 2956 char[] tmp = new char[sp]; 2957 Arrays.fill(tmp, ' '); 2958 sb.insert(0, tmp); It's not a big improvement but maybe you can change the line 3781 exp.append("0").append(len - 1); to use the character-based API to append a single character. Best regards, Andrej Golovnin On Mon, Jul 14, 2014 at 12:07 PM, Claes Redestad <claes.redes...@oracle.com> wrote: > Hi, > > please review this patch which optimizes away some allocations from > java.util.Formatter and achieve 1.1-1.3x speedups of micros targetting > String.format. See bug for more details. > > webrev: http://cr.openjdk.java.net/~redestad/8050142/webrev.0 > bug: https://bugs.openjdk.java.net/browse/JDK-8050142 > > Testing: JPRT, jtreg (java/lang/String, java/util/Formatter), SPECjbb2013 > and microbenchmarks > > Thanks! > > /Claes >