On Thu, 2 Jun 2022 10:57:37 GMT, Claes Redestad <redes...@openjdk.org> wrote:
>> When generating `MethodHandle`-based concatenation expressions in >> `StringConcatFactory` we can reduce the number of classes generated at >> runtime by creating small batches of prependers and mixers before binding >> them into the root expression tree. >> >> Improvements on one-off tests are modest, while the improvement on >> bootstrapping stress tests can be substantial >> ([MixedStringCombinations.java](https://gist.github.com/cl4es/08fb581dece3a73e89bfa52337bc4248)): >> >> | Build | # classes | Runtime | >> | ----------- | ----------------- | --------------- | >> | Baseline | 31119 | 2.942s | >> | Patch | 16208 | 1.958s | >> >> An earlier version of this patch saw a regression in the >> `StringConcatFactoryBootstraps` microbenchmark. After some refactoring along >> with the optimizations in #8881 and #8923 that is no longer the case, and >> allocation pressure is down slightly compared to the baseline on such a >> repeat-the-same-bootstrap stress test: >> >> Baseline: >> >> Benchmark Mode Cnt >> Score Error Units >> SCFB.makeConcatWithConstants avgt 5 >> 2170.039 ? 117.441 ns/op >> SCFB.makeConcatWithConstants:?gc.alloc.rate.norm avgt 5 >> 3538.020 ? 4.558 B/op >> >> This patch: >> >> Benchmark Mode Cnt >> Score Error Units >> SCFB.makeConcatWithConstants avgt 5 >> 2144.807 ? 162.685 ns/op >> SCFB.makeConcatWithConstants:?gc.alloc.rate.norm avgt 5 >> 3184.943 ? 4.495 B/op > > Claes Redestad has updated the pull request incrementally with one additional > commit since the last revision: > > We now don't need big Species classes for shorter concats, so on some tests > the improvements meant more Species class generation. Adjusting HelloClasslist make/jdk/src/classes/build/tools/classlist/HelloClasslist.java line 116: > 114: String CC = "string" + c; > 115: String CCS = "string" + c + s; > 116: String CSCC = "string" + s + "string" + c; I’m pretty sure that `f` and `c` will be inlined as compile‑time constants in the String concat recipes. ------------- PR: https://git.openjdk.java.net/jdk/pull/8855