On Thu, 5 Sep 2024 23:22:01 GMT, Shaojin Wen <s...@openjdk.org> wrote:

>> This is a follow-up to PR #20273, which improves performance when the number 
>> of parameters exceeds 20.
>> 
>> When the number of parameters is large, the possibility of reuse will be 
>> lower, so we can use the static concat method and write the length and coder 
>> directly into the bytecode to solve the performance regression problem.
>
> Shaojin Wen has updated the pull request with a new target base due to a 
> merge or a rebase. The pull request now contains 12 commits:
> 
>  - Merge remote-tracking branch 'upstream/master' into 
> optim_concat_factory_202408
>    
>    # Conflicts:
>    #  src/java.base/share/classes/java/lang/invoke/StringConcatFactory.java
>  - reuseThreshold -> cacheThreshold
>  - Revert "optimize for CompactStrings is off"
>    
>    This reverts commit a9fa264afd9fa625ef29357a7ca8559ce9c5fea4.
>  - optimize for CompactStrings is off
>  - Merge remote-tracking branch 'upstream/master' into 
> optim_concat_factory_202408
>    
>    # Conflicts:
>    #  src/java.base/share/classes/java/lang/invoke/StringConcatFactory.java
>  - add control flag `reuseThreshold`
>  - Revert "Optimize the construction of MethodType and MethodTypeDesc to 
> reduce memory allocation"
>    
>    This reverts commit 3bed7290f5cb987e86407f698fb0598f19d65628.
>  - Optimize the construction of MethodType and MethodTypeDesc to reduce 
> memory allocation
>  - revert code style
>  - from suggest
>  - ... and 2 more: https://git.openjdk.org/jdk/compare/8fb8cd85...5c12e337

src/java.base/share/classes/java/lang/invoke/StringConcatFactory.java line 1288:

> 1286:                             if (staticConcat) {
> 1287:                                 clb.withSuperclass(CD_Object)
> 1288:                                    .withFlags(ACC_FINAL | ACC_SUPER | 
> ACC_SYNTHETIC);

According to #19517, project lilliput wants utility classes to be declared 
`abstract` instead of `final` so their pointers won't be encodable in object 
headers

src/java.base/share/classes/java/lang/invoke/StringConcatFactory.java line 1495:

> 1493:                      */
> 1494:                     if (staticConcat) {
> 1495:                         cb.ldc(coder);

`coder` can only be 0 or 1, so using `loadConstant` to generate `iconst_0` or 
`iconst_1` is better. Other `ldc` with number can be potentially replaced by 
`loadConstant` to generate optimized instructions too.

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

PR Review Comment: https://git.openjdk.org/jdk/pull/20675#discussion_r1746314754
PR Review Comment: https://git.openjdk.org/jdk/pull/20675#discussion_r1746315741

Reply via email to