[PATCH] Use StringJoiner where appropriate in java.base

Kasper Nielsen kasperni at gmail.com
Thu Jun 20 12:39:51 UTC 2019


> If you allowed a two-time pass of the primitive array you could
> actually create a version that only allocated the actual String and
> backing array.

I tried implementing it
https://gist.github.com/kaspernielsen/62e4eedffdb395228777925551a45e7f
And got a 30-40 % performance increase.

ToString2.toStringExisting        1  avgt    5     16.855 ±    0.960  ns/op
ToString2.toStringExisting       10  avgt    5     79.247 ±    3.142  ns/op
ToString2.toStringExisting      100  avgt    5    814.197 ±   46.062  ns/op
ToString2.toStringExisting     1000  avgt    5  15288.172 ± 1649.338  ns/op

ToString2.toString2Pass       1  avgt    5     13.671 ±    0.142  ns/op
ToString2.toString2Pass      10  avgt    5     54.090 ±    0.724  ns/op
ToString2.toString2Pass     100  avgt    5    513.508 ±    6.063  ns/op
ToString2.toString2Pass    1000  avgt    5   9189.950 ±   47.059  ns/op

ToString2.toStringExisting:·gc.alloc.rate.norm                 1  avgt
   5     80.000 ±    0.001    B/op
ToString2.toStringExisting:·gc.alloc.rate.norm                10  avgt
   5    160.000 ±    0.001    B/op
ToString2.toStringExisting:·gc.alloc.rate.norm               100  avgt
   5   1664.000 ±    0.001    B/op
ToString2.toStringExisting:·gc.alloc.rate.norm              1000  avgt
   5  23536.006 ±    0.001    B/op

ToString2.toString2Pass:·gc.alloc.rate.norm                1  avgt
5     48.000 ±    0.001    B/op
ToString2.toString2Pass:·gc.alloc.rate.norm               10  avgt
5    120.000 ±    0.001    B/op
ToString2.toString2Pass:·gc.alloc.rate.norm              100  avgt
5    840.000 ±    0.001    B/op
ToString2.toString2Pass:·gc.alloc.rate.norm             1000  avgt
5   9848.004 ±    0.001    B/op

Don't know if it is something worth adding?

/Kasper


More information about the core-libs-dev mailing list