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

Mandy Chung mchung at openjdk.java.net
Wed Jun 1 21:17:43 UTC 2022


On Wed, 1 Jun 2022 13:31:27 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:
> 
>   Address review comments from @ExE-Boss

The reduction of the LF classes is promising.  This looks okay with me.   This PR would rely on testing to catch issues that are not easily caught through code review.

-------------

Marked as reviewed by mchung (Reviewer).

PR: https://git.openjdk.java.net/jdk/pull/8855


More information about the core-libs-dev mailing list