RFR: 8287522: StringConcatFactory: Add in prependers and mixers in batches [v2]
Mandy Chung
mchung at openjdk.java.net
Wed Jun 1 20:55:23 UTC 2022
On Mon, 30 May 2022 20:23:40 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:
>
> Minor stylistic cleanup
src/java.base/share/classes/java/lang/invoke/LambdaForm.java line 204:
> 202: static BasicType basicType(Class<?> type) {
> 203: if (!type.isPrimitive()) return L_TYPE;
> 204: return basicType(Wrapper.forPrimitiveType(type).basicTypeChar());
Suggestion:
return basicType(Wrapper.basicTypeChar(type));
-------------
PR: https://git.openjdk.java.net/jdk/pull/8855
More information about the core-libs-dev
mailing list