Hello! Please review the following small change in StringConcatHelper::simpleConcat https://bugs.openjdk.java.net/browse/JDK-8247605 https://cr.openjdk.java.net/~tvaleev/webrev/8247605/r1/
This change improves the concatenation of empty string and non-empty string/object by reusing the internal byte[] array. Simple benchmark (StringConcat::concatEmptyRight and StringConcat::concatEmptyLeft) shows the significant performance improvement in both cases when an empty string is prefixed or suffixed. Before patch: Benchmark (intValue) Mode Cnt Score Error Units StringConcat.concatEmptyLeft 4711 avgt 30 18,416 ± 0,081 ns/op StringConcat.concatEmptyRight 4711 avgt 30 18,439 ± 0,068 ns/op StringConcat.concatEmptyLeft:·gc.alloc.rate.norm 4711 avgt 10 48,003 ± 0,001 B/op StringConcat.concatEmptyRight:·gc.alloc.rate.norm 4711 avgt 10 48,003 ± 0,001 B/op After patch: Benchmark (intValue) Mode Cnt Score Error Units StringConcat.concatEmptyLeft 4711 avgt 30 7,846 ± 0,069 ns/op StringConcat.concatEmptyRight 4711 avgt 30 6,800 ± 0,082 ns/op StringConcat.concatEmptyLeft:·gc.alloc.rate.norm 4711 avgt 10 24,001 ± 0,001 B/op StringConcat.concatEmptyRight:·gc.alloc.rate.norm 4711 avgt 10 24,001 ± 0,001 B/op Note that the allocation and array copying time is O(N) where N is the length of non-empty string, so for longer strings, the difference could be bigger. No performance degradation was noticed by me in other StringConcat benchmarks. Previous discussion: http://mail.openjdk.java.net/pipermail/core-libs-dev/2020-June/067217.html With best regards, Tagir Valeev.