RFR: 8287522: StringConcatFactory: Add in prependers and mixers in batches [v7]

ExE Boss duke at openjdk.java.net
Thu Jun 2 18:52:33 UTC 2022


On Thu, 2 Jun 2022 10:57:37 GMT, Claes Redestad <redestad at 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


More information about the core-libs-dev mailing list