On Thu, 22 Aug 2024 11:50:02 GMT, Shaojin Wen <d...@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.

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

> 1474:                      * coder = coder(this.coder, arg0, arg1, ... argN);
> 1475:                      */
> 1476:                     if (staticConcat) {

It might be better for this loop to only be ran when `staticConcat` is `true`:
Suggestion:


                    /*
                     * coder = coder(this.coder, arg0, arg1, ... argN);
                     */
                    if (staticConcat) {
                        for (var constant : constants) {
                            coder  |= JLA.stringCoder(constant);
                            length += constant.length();
                        }

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

> 1709:                      */
> 1710:                     cb.iload(lengthSlot);
> 1711:                     for (int i = prependArgs.parameterCount() - 1; i >= 
> (staticConcat ? 3 : 4); i--) {

The result of `staticConcat ? 3 : 4` should probably be stored in a local 
outside the loop:
Suggestion:

                    for (int i = prependArgs.parameterCount() - 1, end = 
staticConcat ? 3 : 4; i >= end; i--) {

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

PR Review Comment: https://git.openjdk.org/jdk/pull/20675#discussion_r1728578074
PR Review Comment: https://git.openjdk.org/jdk/pull/20675#discussion_r1728586732

Reply via email to