On Wed, 1 Jun 2022 13:31:27 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: > > Address review comments from @ExE-Boss src/java.base/share/classes/java/lang/invoke/StringConcatFactory.java line 459: > 457: String prefix = constants.get(0); > 458: if (prefix == null) { > 459: if (suffix == null) { Is it possible for prefix or suffix an empty string (non-null)? The original code checks `if (constant.isEmpty())` ------------- PR: https://git.openjdk.java.net/jdk/pull/8855