RFR [9]: 8050142: Optimize java.util.Formatter

Claes Redestad claes.redestad at oracle.com
Mon Jul 14 11:26:59 UTC 2014


Hi,

  good suggestions, I'll incorporate them.

/Claes

On 2014-07-14 13:08, Andrej Golovnin wrote:
> 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.redestad at oracle.com <mailto:claes.redestad at 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
>     <http://cr.openjdk.java.net/%7Eredestad/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
>
>




More information about the core-libs-dev mailing list