On Thu, 4 Mar 2021 17:20:40 GMT, Claes Redestad <[email protected]> wrote:
> This patch optimizes String.format expressions that uses trivial specifiers.
> In the JDK, the most common variation of String.format is a variation of
> format("foo: %s", s), which gets a significant speed-up from this.
>
> Various other cleanups and minor improvements reduce overhead further and
> ensure we get a small gain also for more complex format strings.
Microbench results - baseline:
Benchmark Mode Cnt
Score Error Units
StringFormat.complexFormat avgt 5
8842.917 ± 658.269 ns/op
StringFormat.complexFormat:·gc.alloc.rate.norm avgt 5
2176.378 ± 0.483 B/op
StringFormat.stringFormat avgt 5
859.863 ± 97.514 ns/op
StringFormat.stringFormat:·gc.alloc.rate.norm avgt 5
560.091 ± 0.011 B/op
StringFormat.stringIntFormat avgt 5
1619.772 ± 147.646 ns/op
StringFormat.stringIntFormat:·gc.alloc.rate.norm avgt 5
728.132 ± 0.140 B/op
StringFormat.widthStringFormat avgt 5
1060.200 ± 154.025 ns/op
StringFormat.widthStringFormat:·gc.alloc.rate.norm avgt 5
592.108 ± 0.093 B/op
StringFormat.widthStringIntFormat avgt 5
2045.215 ± 246.189 ns/op
StringFormat.widthStringIntFormat:·gc.alloc.rate.norm avgt 5
784.144 ± 0.121 B/op
Patched:
Benchmark Mode Cnt
Score Error Units
StringFormat.complexFormat avgt 5
8023.314 ± 1387.475 ns/op
StringFormat.complexFormat:·gc.alloc.rate.norm avgt 5
2120.399 ± 0.417 B/op
StringFormat.stringFormat avgt 5
286.776 ± 30.645 ns/op
StringFormat.stringFormat:·gc.alloc.rate.norm avgt 5
256.044 ± 0.017 B/op
StringFormat.stringIntFormat avgt 5
626.083 ± 68.652 ns/op
StringFormat.stringIntFormat:·gc.alloc.rate.norm avgt 5
432.073 ± 0.039 B/op
StringFormat.widthStringFormat avgt 5
1061.631 ± 156.444 ns/op
StringFormat.widthStringFormat:·gc.alloc.rate.norm avgt 5
560.103 ± 0.106 B/op
StringFormat.widthStringIntFormat avgt 5
1380.208 ± 267.445 ns/op
StringFormat.widthStringIntFormat:·gc.alloc.rate.norm avgt 5
736.134 ± 0.144 B/op
-Xint similarly sees no change on complexString, but a 3-3.5x speed-up on
stringFormat
-------------
PR: https://git.openjdk.java.net/jdk/pull/2830