On Tue, 20 Feb 2024 17:00:14 GMT, Aleksey Shipilev <sh...@openjdk.org> wrote:
>> JDK-8282429 accidentally removed an optimization (JDK-8240094) that ensured >> StringBuilder/StringBuffer::toString returns `""` when the builders are >> empty. >> >> >> Name Cnt Base Error Test Error Unit >> Change >> StringBuffers.emptyToString 5 12,289 ± 0,384 9,883 ± 0,721 ns/op >> 1,24x (p = 0,000*) >> :gc.alloc.rate 1862,398 ± 57,647 0,007 ± 0,000 MB/sec >> 0,00x (p = 0,000*) >> :gc.alloc.rate.norm 24,000 ± 0,000 0,000 ± 0,000 B/op >> 0,00x (p = 0,000*) >> :gc.count 31,000 0,000 counts >> :gc.time 21,000 ms >> StringBuilders.emptyToString 5 4,146 ± 0,567 0,646 ± 0,003 ns/op >> 6,42x (p = 0,000*) >> :gc.alloc.rate 9208,656 ± 1234,399 0,007 ± 0,000 MB/sec >> 0,00x (p = 0,000*) >> :gc.alloc.rate.norm 40,000 ± 0,000 0,000 ± 0,000 B/op >> 0,00x (p = 0,000*) >> :gc.count 96,000 0,000 counts >> :gc.time 64,000 ms >> * = significant > > test/micro/org/openjdk/bench/java/lang/StringBuffers.java line 49: > >> 47: >> 48: @Benchmark >> 49: public String emptyToString() { > > Do we actually need to remove the `substring` test here? I couldn't figure out why we'd want to have `String::substring` micros in a test `StringBuffers` (there's also a `StringSubstring` micro), though I could deal with that as an explicit cleanup RFE. ------------- PR Review Comment: https://git.openjdk.org/jdk/pull/17931#discussion_r1496266477