Reminder about JDK-8148937 (Compact Strings for StringJoiner)
Сергей Цыпанов
sergei.tsypanov at yandex.ru
Fri Feb 21 09:07:39 UTC 2020
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
More information about the core-libs-dev
mailing list