RFR: 8287522: StringConcatFactory: Add in prependers and mixers in batches [v5]
Claes Redestad
redestad at openjdk.java.net
Wed Jun 1 21:17:41 UTC 2022
> 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 two additional commits since the last revision:
- Mandy review comment #1: Cleanup LF.basicType a bit more.
- Cleanup too generic String.valueOf lookups
-------------
Changes:
- all: https://git.openjdk.java.net/jdk/pull/8855/files
- new: https://git.openjdk.java.net/jdk/pull/8855/files/f1742a84..56bdc4c4
Webrevs:
- full: https://webrevs.openjdk.java.net/?repo=jdk&pr=8855&range=04
- incr: https://webrevs.openjdk.java.net/?repo=jdk&pr=8855&range=03-04
Stats: 18 lines in 2 files changed: 1 ins; 8 del; 9 mod
Patch: https://git.openjdk.java.net/jdk/pull/8855.diff
Fetch: git fetch https://git.openjdk.java.net/jdk pull/8855/head:pull/8855
PR: https://git.openjdk.java.net/jdk/pull/8855
More information about the core-libs-dev
mailing list