On Thu, 22 Aug 2024 11:50:02 GMT, Shaojin Wen <[email protected]> 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