Hello,

previous week I wrote a couple of messages regarding integration of JEP 254 
into j.u.StringJoiner.
As Brent Christian pointed out [1], there's already existing JDK-8148937 [2] 
along with the patch [3].
In comments of it was pointed out, that the patch applied in 2016 
brought some regression [4] due to JDK-8149758 [5].

I've applied the same patch to existing code base of JDK 14 and got the results 
below.
Now we have only 1 case with regression within 8% of baseline. In all other 
cases we
for sure have measurable improvement.

StringJoiner is widey used in Collectors.joining(), String.join(), and as new 
StringJoiner
in many places (38 usages in java.base). In turn Collectors.joining() is used 
e.g. in j.l.Class, j.l.r.Executable and in other places (13 usages in 
java.base, 8 in jdk.compiler).

So my question is whether we can apply Alexey's patch for JDK 14 or JDK 15?

1. 
https://mail.openjdk.java.net/pipermail/core-libs-dev/2020-February/064780.html
2. https://bugs.openjdk.java.net/browse/JDK-8148937
3. http://cr.openjdk.java.net/~shade/8148937/webrev.01/
4. http://cr.openjdk.java.net/~shade/8148937/notes.txt
5. https://bugs.openjdk.java.net/browse/JDK-8149758

            count   latin   len        Original        Patched

sj              1    true     1     27.7 ±  1.2      19.7 ±  0.2   ns/op
sj              1    true     5     27.7 ±  0.1      19.8 ±  0.0   ns/op
sj              1    true    10     29.0 ±  0.6      20.1 ±  0.1   ns/op
sj              1    true   100     51.4 ±  0.1      32.9 ±  0.1   ns/op
sj              5    true     1     71.1 ±  0.4      53.8 ±  0.1   ns/op
sj              5    true     5     79.5 ±  0.3      54.8 ±  0.1   ns/op
sj              5    true    10     81.2 ±  0.3      56.1 ±  0.1   ns/op
sj              5    true   100    150.0 ±  0.4      78.5 ±  0.3   ns/op
sj             10    true     1    145.5 ±  0.7     127.1 ±  0.5   ns/op
sj             10    true     5    160.0 ±  0.8     130.8 ±  0.3   ns/op
sj             10    true    10    165.6 ±  0.4     138.9 ±  0.4   ns/op
sj             10    true   100    340.2 ±  1.2     175.2 ±  0.7   ns/op
sj            100    true     1   1114.3 ± 15.9    1197.4 ± 34.0   ns/op !
sj            100    true     5   1184.2 ± 18.5    1159.0 ± 32.3   ns/op
sj            100    true    10   1345.8 ± 13.9    1233.5 ± 32.9   ns/op
sj            100    true   100   3156.1 ± 19.1    1727.9 ± 37.6   ns/op

sj              1   false     1     33.5 ±  0.4      19.6 ±  0.0   ns/op
sj              1   false     5     33.3 ±  0.3      20.1 ±  0.1   ns/op
sj              1   false    10     33.8 ±  0.1      20.6 ±  0.0   ns/op
sj              1   false   100     57.5 ±  0.2      39.6 ±  0.1   ns/op
sj              5   false     1     82.9 ±  0.5      64.2 ±  1.3   ns/op
sj              5   false     5     86.0 ±  0.5      66.6 ±  0.8   ns/op
sj              5   false    10     96.9 ±  0.5      76.9 ±  0.7   ns/op
sj              5   false   100    224.2 ±  0.6     125.1 ±  0.6   ns/op
sj             10   false     1    165.7 ±  0.9     152.1 ±  1.0   ns/op
sj             10   false     5    178.4 ±  0.7     163.7 ±  0.9   ns/op
sj             10   false    10    191.7 ±  0.9     172.5 ±  0.8   ns/op
sj             10   false   100    534.4 ±  1.4     305.2 ±  1.1   ns/op
sj            100   false     1   1435.9 ±  9.5    1333.0 ±  4.7   ns/op
sj            100   false     5   1618.5 ± 14.3    1379.7 ± 10.4   ns/op
sj            100   false    10   1898.1 ±  9.4    1531.5 ± 13.7   ns/op
sj            100   false   100   4247.4 ± 60.7    2423.8 ± 11.9   ns/op

sj:·g.a.r.n     1    true     1    124.0 ±  4. 0      96.0 ±  0.0   B/op
sj:·g.a.r.n     1    true     5    128.0 ±  0. 0      96.0 ±  0.0   B/op
sj:·g.a.r.n     1    true    10    144.0 ±  0. 0     104.0 ±  0.0   B/op
sj:·g.a.r.n     1    true   100    416.0 ±  0. 0     192.0 ±  0.0   B/op
sj:·g.a.r.n     5    true     1    144.0 ±  0. 0      96.0 ±  0.0   B/op
sj:·g.a.r.n     5    true     5    200.0 ±  0. 0     120.0 ±  0.0   B/op
sj:·g.a.r.n     5    true    10    272.0 ±  0. 0     144.0 ±  0.0   B/op
sj:·g.a.r.n     5    true   100   1632.0 ±  0. 0     592.0 ±  0.0   B/op
sj:·g.a.r.n    10    true     1    256.0 ±  0. 0     184.0 ±  0.0   B/op
sj:·g.a.r.n    10    true     5    376.0 ±  0. 0     224.0 ±  0.0   B/op
sj:·g.a.r.n    10    true    10    520.0 ±  0. 0     272.0 ±  0.0   B/op
sj:·g.a.r.n    10    true   100   3224.1 ±  0. 0    1168.0 ±  0.0   B/op
sj:·g.a.r.n   100    true     1   1752.1 ±  5. 4    1244.1 ±  9.5   B/op
sj:·g.a.r.n   100    true     5   2952.2 ±  5. 4    1627.3 ±  7.6   B/op
sj:·g.a.r.n   100    true    10   4444.4 ±  4. 0    2140.2 ±  9.5   B/op
sj:·g.a.r.n   100    true   100  31445.6 ±  4. 0   11135.0 ±  9.3   B/op

sj:·g.a.r.n     1   false     1    144.0 ±  0. 0      96.0 ±  0.0   B/op
sj:·g.a.r.n     1   false     5    160.0 ±  0. 0     104.0 ±  0.0   B/op
sj:·g.a.r.n     1   false    10    184.0 ±  0. 0     112.0 ±  0.0   B/op
sj:·g.a.r.n     1   false   100    640.0 ±  0. 0     288.0 ±  0.0   B/op
sj:·g.a.r.n     5   false     1    184.0 ±  0. 0     104.0 ±  0.0   B/op
sj:·g.a.r.n     5   false     5    280.0 ±  0. 0     144.0 ±  0.0   B/op
sj:·g.a.r.n     5   false    10    400.0 ±  0. 0     192.0 ±  0.0   B/op
sj:·g.a.r.n     5   false   100   2664.1 ±  0. 0    1088.0 ±  0.0   B/op
sj:·g.a.r.n    10   false     1    320.0 ±  0. 0     192.0 ±  0.0   B/op
sj:·g.a.r.n    10   false     5    520.0 ±  0. 0     272.0 ±  0.0   B/op
sj:·g.a.r.n    10   false    10    760.0 ±  0. 0     368.0 ±  0.0   B/op
sj:·g.a.r.n    10   false   100   5264.2 ±  0. 0    2168.1 ±  0.0   B/op
sj:·g.a.r.n   100   false     1   2208.2 ±  0. 0    1317.7 ±  5.7   B/op
sj:·g.a.r.n   100   false     5   4196.3 ±  6. 2    2123.4 ±  7.6   B/op
sj:·g.a.r.n   100   false    10   6704.6 ±  0. 0    3123.4 ±  7.6   B/op
sj:·g.a.r.n   100   false   100  51698.1 ±  5. 4   21124.3 ±  7.6   B/op

Reply via email to